したがって、通常、20ノードのクラスターが3GB(200分割)のデータを処理するジョブを送信するには、約30秒かかり、実際の実行には約1mかかります。求人の提出プロセスのボトルネックを理解し、次の見積もりを理解したい
MapReduceごとのオーバーヘッドは重要です:MapReduceジョブの開始/終了には時間がかかります
私が知っているいくつかのプロセス:1。データ分割2.jarファイル共有
このレイテンシーを理解するのに役立つHDFSとM/Rについて理解すべきいくつかのこと:
1000行のコンテンツを含むファイルを処理する場合は、通常のファイル読み取りおよび処理プログラムを使用することをお勧めします。分散システムでプロセスを生成するHadoopインフラストラクチャはメリットをもたらしませんが、関連するデータチャンクを含むデータノードの検索、それらの処理プログラムの開始、結果の追跡と収集の追加のオーバーヘッドにのみ貢献します。
次に、それを100ペタバイトのデータに拡張します。これらのオーバーヘッドは、処理にかかる時間と比較して、まったく重要ではないように見えます。プロセッサー(マッパーとレデューサー)の並列化は、ここでの利点を示します。
したがって、M / Rのパフォーマンスを分析する前に、オーバーヘッドをよりよく理解できるように、まずクラスターのベンチマークを検討する必要があります。
クラスターで操作なしのmap-reduceプログラムを実行するには、どのくらいの時間がかかりますか?
この目的でMRBenchを使用します。
このプログラムを実行するには、次のことを試してください(最新バージョンの正しいアプローチを確認してください:
hadoop jar /usr/lib/hadoop-0.20/hadoop-test.jar mrbench -numRuns 50
驚いたことに、開発クラスターの1つでは22秒でした。
もう1つの問題はファイルサイズです。
ファイルサイズがHDFSブロックサイズよりも小さい場合、Map/Reduceプログラムにはかなりのオーバーヘッドがあります。Hadoopは通常、ブロックごとにマッパーを生成しようとします。つまり、5KBのファイルが30個ある場合、ファイルのサイズが小さくても、Hadoopは最終的にブロックごとに30個のマッパーを生成する可能性があります。小さなサイズのファイルの処理に費やす時間と比較して、各プログラムのオーバーヘッドが大きいため、これは実際の無駄です。
私の知る限り、ジョブの実行遅延を引き起こす単一のボトルネックはありません。もしあったとしたら、それはずっと前に解決されていただろう。
時間がかかるステップがいくつかあり、プロセスが遅い理由があります。私はそれらをリストし、私ができる場所を推定しようとします:
私は同様の問題を見てきました、そして私は次のステップで壊れている解決策を述べることができます:
データノードと名前ノードを試してみてください。
2つのケースで機能し、ヒットとトライアルで機能した下位バージョンのhadoop(hadoop 2.5.2)をインストールしてみてください。