Hadoop (Amazon Elastic mapreduce) を使用して、Web サーバーからのログを処理したいと考えています。私は助けを求めてグーグルで検索しましたが、何も役に立ちませんでした。これを行うことができるかどうか、またはこれを行う別の方法があるかどうかを知りたいです。
4 に答える
Hadoopはライブリアルタイム処理には使用されません。ただし、ログを1時間ごとに処理するために使用できますが、1時間遅れて、ほぼリアルタイムになります。ログを処理する必要があるのではないかと思います。
Hadoop は通常、オフラインで使用されます。したがって、ログを定期的に処理したいと思います。
私が以前関わったプロジェクトでは、1 時間ごと (毎時 x:00) にローテーションされるログ ファイルをサーバーに生成させました。1 時間ごと (x:30 に毎時間) に実行されるスクリプトを作成し、ファイルを HDFS にアップロードしました (まだ存在していなかったファイル)。その後、Hadoop で何度でもジョブを実行して、これらのファイルを処理できます。
より優れたリアルタイムの代替手段もあると確信しています。
真のリアルタイム処理が必要な場合は、オープンソースで GitHub でホストされているTwitter の Stormを検討することをお勧めします。チュートリアルはこちら。
大企業での生産に使われているようです。
その点で、私はStormを自分で使用しておらず、実際に質問と回答で言及されているものと同様のことを行っています:
- Apache を使用してイベントをログに記録します (15/30 分ごとにログ ファイルを変更するために、rotatelogs を使用)
- ときどき S3 にアップロードする
- 既存の Hadoop クラスターに新しいステップを追加する (Amazon EMR 上)
Hadoop を使用すると、クラスターで頻繁にバッチ処理を実行し、新しいジョブを追加するだけでリアルタイムに近づけることができますが、真のリアルタイムではありません。そのためには、Storm などが必要です。
Flume をログ コレクターとして使用し、バッチ処理のために S3 に保存することもできます。
http://www.cloudera.com/blog/2011/02/distributed-flume-setup-with-an-s3-sink/