我从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;
我什么都没得到这就是为什么我想知道我是否可以在调试模式下运行配置单元以查看它失败的地方
答案 0 :(得分:34)
你最好通过将记录器模式切换到DEBUG来启动hive shell,如下所示,我希望你能从那里找到有用的东西。
hive --hiveconf hive.root.logger=DEBUG,console
答案 1 :(得分:2)
可以调试Hive代码。此链接可以帮助您:https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide#DeveloperGuide-DebuggingHiveCode
答案 2 :(得分: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
的主目录,因此被选中。