0

Fluentd を使用して、HDFS の Apache ログ データをキャプチャして統合しています。データを HDFS に書き込むようにエージェントを構成しました。つまり、/etc/td-agent/td-agent.confファイルには以下が含まれます。

<source>
  type tail
  path /var/log/httpd/access_log
  pos_file /var/log/td-agent/httpd-access.log.pos
  tag apache.access
  format apache2
</source>

<match apache.access>
  type webhdfs
  host fqdn.of.name.node
  port 50070
  path /data/access_logs/access.log.%Y%m%d_%H.${hostname}.log
  flush_interval 10s
</match>

Fluentd のドキュメントに従って、HDFS の追加を有効にしました。データは完全に流れます。過去数週間、問題なく何百万ものトランザクションをストリーミングしています.

データは、次のような行を含むファイルに保存されます。

2015-01-10T17:00:00Z    apache.access   {"host":"155.96.21.4","user":null,"method":"GET","path":"/somepage/index.html","code":200,"size":8192,"referer":null,"agent":"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)"}

各行には、タブで区切られた 3 つの要素が含まれています。

  1. タイムスタンプ
  2. 識別タグ
  3. Apache ログの列のキーと値のペアを含む JSON

Hive テーブルを作成しようとしていますが、タブ区切りの文字列と各行の JSON が混在しているという事実を処理する方法がわかりません。Hive に JSON デシリアライザーがあることは知っていますが、レコードが純粋な JSON ではないため、うまくいかないと思います。

このデータの create table ステートメントを作成する方法について誰か提案がありますか?

4

1 に答える 1

0

次のパラメーターを out_wedhdfs 構成に追加してみてください。

output_data_type json

これは文書化する必要があります。すぐにドキュメントを更新します。

于 2015-01-22T22:05:10.213 に答える