7

Map-Reduce ジョブのタイミング結果がわかりません。たとえば、実行中のジョブでは、ジョブ トラッカーから次の結果が得られます。

終了時間: 1 分 39 秒

CPU 使用時間 (ミリ秒) 150,460 152,030 302,490

費やされた CPU 時間 (ミリ秒) のエントリは、それぞれ Map、Reduce、および Total です。しかし、「消費されたCPU時間」はどのように測定され、それは何を意味するのでしょうか? これは、ジョブに割り当てられたマッパーとリデューサーのそれぞれで費やされた合計累積時間ですか? シャッフル、ソート、パーティションなどの時間など、フレームワークから他の時間を測定することはできますか? もしそうなら、どのように?

私を悩ませている2番目の質問。ドライバークラスで getTime() を使用することを提案する投稿 ( Link1 、 Link2 ) をいくつました。

long start = new Date().getTime();
boolean status = job.waitForCompletion(true);
long end = new Date().getTime();
System.out.println("Job took "+(end-start) + "milliseconds");

とにかく、これは Job Tracker の出力の最初のエントリが提供することを行っていませんか? これは必要ですか?特に IO 時間、ノードごと/ステージごとの計算時間を計りたい場合に、hadoop ジョブの時間を計る最良の方法は何ですか?

4

1 に答える 1

16

マップ フェーズは、レコード リーダー、マップ、コンバイナー、およびパーティショナーで構成されます。

リデュース フェーズは、シャッフル、ソート、リデュース、出力で構成されます。

そこに表示されているCPU時間は、関数自体だけでなく、マップフェーズ全体とリデュースフェーズ全体のものです。mapフェーズと reduceフェーズの一部にすぎない map 関数と reduce 関数があるため、これは一種の紛らわしい用語です。これは、クラスター内のすべてのノードの合計 CPU 時間です。

CPU時間はリアルタイムとは大きく異なります。CPU 時間は CPU で費やされた時間であり、リアルタイムは人間として経験する時間です。これについて考えてみてください。同じデータに対して同じジョブを実行しているとしますが、1 つの 20 ノード クラスターで、次に 200 ノード クラスターで実行されているとします。全体として、両方のクラスターで同じ量の CPU 時間が使用されますが、200 ノードのクラスターはリアルタイムで 10 倍速く実行されます。CPU 時間は、多数のジョブが同時に実行されている共有システムがある場合に役立つ指標です。

各フェーズで CPU 時間を取得するために、どのように深く掘り下げるかわかりません。ただし、日付タイマーを使用することは、おそらくあなたが探しているものではありません.

于 2012-07-31T06:25:42.597 に答える