MapReduce は http サーバーのログを分析するのにどのように適した方法ですか?
-
06-09-2019 - |
質問
私はしばらく MapReduce について調べてきましたが、これはフォールトトレラントな分散コンピューティングを実装するための非常に良い方法であるようです。私はこのトピックに関する多くの論文や記事を読み、一連の仮想マシンに Hadoop をインストールし、非常に興味深いテストをいくつか行いました。Map と Reduce の手順を本当に理解できたと思います。
しかし、ここに私の問題があります: http サーバーのログ分析にどのように役立つのかわかりません。
私の理解では、大企業 (Facebook など) は、http ログから視聴者統計を抽出するプロセスを高速化するために、http ログを計算する目的で MapReduce を使用していると考えています。私が働いている会社は、Facebook より小規模ではありますが、毎日計算すべき大量のウェブログを抱えています (100Go は毎月 5 ~ 10 パーセント増加しています)。現在、これらのログは 1 台のサーバーで処理されており、問題なく動作しています。しかし、すぐに役立つ最適化として、コンピューティング ジョブの分散がすぐに思い浮かびます。
以下は私が今すぐに答えることができない質問です。何か助けていただければ幸いです。
- MapReduce の概念は本当にウェブログ分析に適用できるのでしょうか?
- MapReduce はそれを行う最も賢い方法ですか?
- Web ログ ファイルをさまざまなコンピューティング インスタンス間でどのように分割しますか?
ありがとう。
ニコラス
解決
MapReduce の概念は本当にウェブログ分析に適用できるのでしょうか?
はい。
ハッジ ログファイルを、たとえば 10,000 行または 1,000,000 行のチャンクに分割し (ログファイルの種類に適したチャンクであれば何でも構いません。Apache ログファイルの場合はもっと大きな数を選択します)、特定の何かを抽出するいくつかのマッパーにそれらをフィードすることができます (ブラウザ、IP アドレス、...、ユーザー名、... など) 各ログ行から各行が出現した回数を数えて減らします (簡略化)。
192.168.1.1,FireFox x.x,username1
192.168.1.1,FireFox x.x,username1
192.168.1.2,FireFox y.y,username1
192.168.1.7,IE 7.0,username1
バージョンを無視してブラウザを抽出するには、マップ操作を使用してこのリストを取得します。
FireFox
FireFox
FireFox
IE
次に、reduceしてこれを取得します。Firefox、3 IE、1
MapReduce はそれを行う最も賢い方法ですか?
それは賢いことですが、利益を得るためには非常に大きな力が必要になります...ペタバイト単位のログを分割しています。
このようなことを行うには、メッセージ キューと、キューから作業をプルし、ジョブを実行し、結果を別のキューにプッシュする処理クライアントを備えた、メッセージ キューと一貫したストレージ エンジン (データベースなど) を使用することを好みます。ある時間枠で実行され、他の人が処理できるようになります。これらのクライアントは、特定のことを実行する小さなプログラムになります。
1 つのクライアントから始めて 1,000 まで拡張することもできます。LAN 上のすべての PC 上でスクリーンセーバーとして実行するクライアントを用意し、8 コア サーバー上で 8 つのクライアント、デュアル コア PC 上で 2 つのクライアントを実行することもできます...
プル付き:100 または 10 のクライアントを動作させることも、マルチコア マシンで複数のクライアントを実行することもでき、クライアントが完了したものはすべて次のステップで使用できます。また、作業を行うためにハッシュや代入を行う必要はありません。100%ダイナミックです。
http://img355.imageshack.us/img355/7355/mqlogs.png
Web ログ ファイルをさまざまなコンピューティング インスタンス間でどのように分割しますか?
テキストベースのログファイルの場合は、要素または行の数によって指定されます。
MapReduce をテストするには、Hadoop を試してみることをお勧めします。
他のヒント
- MapReduce の概念は本当にウェブログ分析に適用できるのでしょうか?
もちろん。どのような種類のデータを保存していますか?
- MapReduce はそれを行う最も賢い方法ですか?
これにより、多くの汎用マシンに対して一度にクエリを実行できるため、確かに便利です。あるいは、試してみることもできます シャーディング.
- Web ログ ファイルをさまざまなコンピューティング インスタンス間でどのように分割しますか?
一般に、データを配布するには、 一貫したハッシュアルゴリズム, そのため、後で簡単にインスタンスを追加できます。通常のデータベースの主キーとなるものを使用してハッシュする必要があります。ユーザー ID、IP アドレス、リファラー、ページ、広告などが考えられます。ロギングのトピックは何でも構いません。