目的: -SerDe機能を使用してログ データを解析し、HIVE にロードします。SELECT ステートメントを使用してデータを取得する際に問題に直面します。
テーブルを作成し、データを正常にロードできました。ただし、select ステートメントは NULL 値のみを取得します。
サンプル ログ データ:
2013-02-21 00:13:48,916 INFO org.apache.hadoop.hdfs.server.datanode.DataBlockScanner: Verification succeeded for blk_5729677439273359430_1495
上記のログを解析するために思いついた正規表現は次のとおりです。
([^ ]*) ([^ ]{8})[^ ]* ([A-Z]*) ([^ ]*): ([[^ ]*\s]*)
テーブルの作成
CREATE EXTERNAL TABLE log (
dt STRING,
time STRING,
loglevel STRING,
check STRING,
status STRING )
ROW FORMAT
SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex"([^ ]*) ([^ ]{8})[^ ]* ([A-Z]*) ([^ ]*): ([[^ ]*\s]*)",
"output.format.string"="%1$s %2$s %3$s %4$s %5$s")
STORED AS TEXTFILE LOCATION '/tmp/log/';
jar を追加しました。
add jar /usr/lib/hive/lib/hive-contrib-0.7.1-cdh3u4.jar;
データを読み込む:
load data local inpath "/tmp/logdata.txt" into table log;
データを取得する:
Select * from log LIMIT 1;
出力:
NULL NULL NULL NULL NULL
サンプル ログ データ:
2013-02-21 00:13:48,916 INFO org.apache.hadoop.hdfs.server.datanode.DataBlockScanner:
Verification succeeded for blk_5729677439273359430_1495
2013-02-21 00:15:39,929 INFO org.apache.hadoop.hdfs.server.datanode.DataBlockScanner:
Verification succeeded for blk_-4787916211671845946_1464
前もって感謝します!!