私はファイルを解析するためのカスタムSerDeを作成するためにclouderaウェブサイトから例を取りました
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を実行して、どこでエラーが発生しているのかを確認できるかどうかを知りたかったのです。
次のようにロガーモードをDEBUGに切り替えることにより、Hive Shellをより適切に開始できます。
Hive --hiveconf Hive.root.logger=DEBUG,console
Hiveコードをデバッグできます。このリンクが役立つ場合があります: https://cwiki.Apache.org/confluence/display/Hive/DeveloperGuide#DeveloperGuide-DebuggingHiveCode
設定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
を含むホームディレクトリが追加され、ピックアップされます。