0

現在、自分の Web ページのすべてのアクティビティを、ファイル access.log にある nginx Web サーバーに記録しています。このファイルはその形式のために理解できません。これらのログ ファイルを Hadoop Hive にエクスポートして分析したいと考えています。ただし、Hive は生の nginx ログを理解できません。したがって、これらのログを JSON または CSV 形式に再生成し、その後、ログをクエリおよび分析できるハイブにエクスポートする予定です。上記の作業を可能にするツール/方法をいくつか提案してください。現在、nginx のログは次のようになっています。

115.249.242.17 - - [01/Jun/2012:18:44:57 +0530] "GET /flashlayer?videoId=66127&playSessionId=VOD_66127_e04393db-0b40-44b1-aad8-aa2169ac71a710.32.6.1311338556485611&duration=0&playerState=playing&playerError=null HTTP/1.1" 200 86 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0"
4

2 に答える 2

1

例として提供したログ行を考えると、問題なく HDFS データの上に Hive テーブルを作成できるはずです。

開始するには、MetadataTypedColumnsetSerDe または RegexSerDe を使用できます。MetadataTypedColumnsetSerDe は通常、レコードのフィールドがタブやコンマなどの同じ文字で区切られている場合に使用されます。これは、ステートメントで使用するときにデフォルトで使用される SerDeROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'ですCREATE TABLE。SerDe を明示的に指定する必要はありません。

通常、RegexSerDe は、すべてのレコードが特定の正規表現に一致する場合に使用されます。この正規表現でグループ化を使用して、列データを作成する部分を抽出できます。RegexSerDe の例はこちらから入手できます

RegexSerDe は LazySimpleSerDe よりもパフォーマンスが悪いため、可能であれば LazySimpleSerDe を使用することをお勧めします。

また、使用する SerDe に関係なく、Hive には現在、テーブルの 1 つのレコードが 1 つの Hive に存在する必要があるという制限があることに注意してください。言い換えると、データ ファイルの複数の行にレコードをこぼすことはできません (データが XML の場合は非常に一般的です)。また、1 つの行に複数のレコードを含めることもできません。この制限を回避する方法はありますが、可能であればそのようなシナリオは避けてください。

于 2012-06-05T05:08:43.207 に答える
-1

おそらく、sedはそのようなタスクに最適で最もシンプルなツールです。

于 2012-06-02T11:54:20.537 に答える