0

目的: -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

前もって感謝します!!

4

2 に答える 2

0

「input.regex」の後に「=」を追加する必要があるようです

通常、この種のエラーは、正規表現が入力と完全に一致しないことが原因で発生します。

于 2014-11-22T05:59:28.370 に答える
0

これを試してみてください、Rubularリンク

([^ ]*) ([^ ]{8})[^ ]* ([A-Z]*) ([^ ]*): (.*)
于 2013-03-30T19:00:20.480 に答える