1

mapreduceを使用してApacheアクセスログとtomcatログの両方を次々に解析する必要があります。いくつかのフィールドがtomcatログから抽出され、残りはApacheログから抽出されます。タイムスタンプに基づいて/ map抽出されたフィールドをマージし、これらのマップされたフィールドを従来のリレーショナルデータベース(例:MySQL)にエクスポートする必要があります。

正規表現または豚を使用して情報を解析および抽出できます。私が直面している課題は、両方のログから抽出された情報を単一の集計形式またはファイルにマッピングする方法と、このデータをMYSQLにエクスポートする方法です。

私が考えているアプローチはほとんどありません

1)解析されたApacheアクセスログとtomcatログの両方からのmap reduceの出力を別々のファイルに書き込み、それらを1つのファイルにマージします(これもタイムスタンプに基づいています)。このデータをMySQLにエクスポートします。

2)HbaseまたはHiveを使用して、データをテーブル形式でhadoopに保存し、MySQLにエクスポートします

3)JDBCを使用して、mapreduceの出力をMySQLに直接書き込みます。

どのアプローチが最も実行可能であり、また、あなたが知っている他の代替ソリューションを提案してください。

4

1 に答える 1

2

ほとんどの場合、大きくて複雑なジョブを実行するよりも、小さくて単純なMRジョブを作成してそれらをチェーン化する方が望ましいです。私はあなたの最善の選択肢は#1のようなもので行くことだと思います。言い換えると:

  1. Apachehttpdログを統一された形式に処理します。
  2. Tomcatログを統一された形式に処理します。
  3. 意味のあるロジックを使用して1と2の出力を結合し、結果を同じ形式で書き込みます。
  4. 結果のデータセットをデータベースにエクスポートします。

おそらく、同じステップで結合と変換(1と2)を実行できます。マップを使用して変換し、サイド結合を減らします。

ランダムアクセスのオーバーヘッドが必要/必要なようには思えないので、HBaseは調べません。これはその長所ではありません(ただし、HBaseの各レコードをタイムスタンプで検索し、存在するかどうかを確認し、レコードをマージするか、存在しない場合は単に挿入することで、ランダムアクセスの意味でそれを行うことができますが、これは比較的遅いです)。Hiveは、2つの形式の「統一された」結果を保存するのに便利な場合がありますが、それでもレコードをその形式に変換する必要があります。

レデューサーにMySQLに直接書き込みをさせたくはありません。これにより、データベースに対するDDOS攻撃が効果的に発生します。それぞれが5つのレデューサーを実行している10ノードのクラスターを考えてみましょう。同じテーブルに、50の同時ライターがあります。クラスターを成長させると、最大接続数をすぐに超えて、RDBMSをチョークします。

とはいえ、完全なログレコードを検討している場合は、これだけのデータをデータベースに入れることが理にかなっているかどうかを自問してください。この量のデータは、まさにHadoop自体が長期的に保存および処理することを目的としたタイプのケースです。このデータの集計を計算している場合は、必ず、MySQLにデータを入れてください。

お役に立てれば。

于 2010-07-10T23:24:33.843 に答える