私は Hadoop をいじっており、Ubuntu で 2 ノード クラスターをセットアップしました。WordCount の例は問題なく動作します。
ここで、いくつかのログ データを分析するために独自の MapReduce プログラムを作成したいと思います (主な理由: シンプルに見え、データが豊富にあるため)
ログの各行の形式は次のとおりです
<UUID> <Event> <Timestamp>
イベントは、INIT、START、STOP、ERROR などです。私が最も興味を持っているのは、同じ UUID の START イベントと STOP イベントの間の経過時間です。
たとえば、私のログには次のようなエントリが含まれています
35FAA840-1299-11DF-8A39-0800200C9A66 START 1265403584
[...many other lines...]
35FAA840-1299-11DF-8A39-0800200C9A66 STOP 1265403777
私の現在の線形プログラムは、ファイルを読み取り、メモリ内の開始イベントを記憶し、対応する終了イベントが見つかったら経過時間をファイルに書き込みます (他のイベントを含む行は現在無視され、エラー イベントは UUID を無効にし、も無視されます) 1
これを Hadoop/MapReduce プログラムに移植したいと考えています。しかし、エントリのマッチングを行う方法がわかりません。ファイルの分割/トークン化は簡単で、一致するものを見つけることは Reduce-Class になると思います。しかし、それはどのように見えるでしょうか?MapReduce ジョブで数学エントリを見つけるにはどうすればよいですか?
私の主な焦点は、Hadopo/MapReduce を理解することです。Pig やその他の Apache プログラムへのリンクは大歓迎ですが、純粋な Hadoop/MapReduce でこの問題を解決したいと考えています。ありがとうございました。
1) ログは実行中のアプリケーションから取得されるため、一部の開始イベントには対応する終了イベントがまだない可能性があり、ログファイルの分割により、開始イベントのない終了イベントが発生します。