如何在调试模式下运行Hive

11

我从Cloudera网站上参考了一个示例,编写了一个自定义的SerDe来解析文件。

http://blog.cloudera.com/blog/2012/12/how-to-use-a-serde-in-apache-hive/

这个示例看起来不错,但是当我使用自定义的Serde创建表格时...

ADD JAR <path-to-hive-serdes-jar>;

CREATE EXTERNAL TABLE tweets (
  id BIGINT,
  created_at STRING,
  source STRING,
  favorited BOOLEAN,
  retweeted_status STRUCT<
    text:STRING,
    user:STRUCT<screen_name:STRING,name:STRING>,
    retweet_count:INT>,
  entities STRUCT<
    urls:ARRAY<STRUCT<expanded_url:STRING>>,
    user_mentions:ARRAY<STRUCT<screen_name:STRING,name:STRING>>,
    hashtags:ARRAY<STRUCT<text:STRING>>>,
  text STRING,
  user STRUCT<
    screen_name:STRING,
    name:STRING,
    friends_count:INT,
    followers_count:INT,
    statuses_count:INT,
    verified:BOOLEAN,
    utc_offset:INT,
    time_zone:STRING>,
  in_reply_to_screen_name STRING
) 
PARTITIONED BY (datehour INT)
ROW FORMAT SERDE 'com.cloudera.hive.serde.JSONSerDe'
LOCATION '/user/flume/tweets';

它执行得非常好,但是当我这样做时

select * from tweets;

我什么都得不到,所以我想知道是否可以在调试模式下运行Hive,以查看它在哪里失败了。

3个回答

47

你最好通过以下方式将日志记录器模式切换为DEBUG来启动Hive shell,希望你能从中找到一些有用的信息。

hive --hiveconf hive.root.logger=DEBUG,console

1
可以很容易地将其定向到文件:hive --hiveconf hive.root.logger=DEBUG,RFA默认情况下,它将以/tmp/<username>/hive.log路径结束。 - selle

2

设置hive --hiveconf hive.root.logger=DEBUG,console可能因为公司特定的设置而并非总是有效

我最终在我的主目录中创建了一个hive-log4j.properties文件,并进行以下设置:

log4j.rootCategory=DEBUG,console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n

使用CLASSPATH=$HOME hive启动hive shell,这会将包含hive-log4j.properties的主目录添加到类路径的前面,因此可以被识别。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接