2013-03-01 5 views
24

GoogleのMapReduceの論文では、バックアップタスクがありますが、Hadoopでは投機的タスクと同じことだと思います。投機的なタスクはどのように実装されていますか?私が投機的な仕事を始めたとき、仕事は古いものからゆっくりと始めて、あるいは古い仕事がどこに到達したかで始まります(もしそうなら、すべての中間的な状態とデータをコピーする必要がありますか?)Hadoop投機的タスクの実行

+0

が問題に加えて、理由のリストに何をされているだろうか?投機的な執行が無効になったときに得られた利益は何か。 –

答えて

58

Hadoopシステムの1つの問題は、多くのノードでタスクを分割することによって、いくつかの低速ノードがプログラムの残りのレートを制限する可能性があることです。

ハードウェアの低下やソフトウェアの誤設定など、さまざまな理由でタスクが遅くなる可能性がありますが、予想よりも長い時間が経過してもタスクが正常に完了するため、原因を検出するのが難しい場合があります。 Hadoopは低速実行タスクを診断して修正しようとしません。代わりに、タスクが予想よりも遅く実行されていることを検出し、別の同等のタスクをバックアップとして起動します。これは、投機的なタスクの実行と呼ばれます。

たとえば、あるノードに低速ディスクコントローラがある場合、他のすべてのノードの速度のわずか10%で入力を読み取っている可能性があります。したがって、99のマップタスクが既に完了している場合、システムは最終マップタスクがチェックインするのを待っています。これは、他のすべてのノードよりもはるかに時間がかかります。

タスクを互いに独立して実行することによって、個々のタスクは入力がどこから来るのかを知りません。タスクは、Hadoopプラットフォームを信頼して適切な入力を提供するだけです。したがって、同じ入力を並列に複数回処理して、マシン機能の違いを利用することができます。ジョブのほとんどのタスクが終了すると、Hadoopプラットフォームは、実行する他の作業がない複数のノードにまたがって残りのタスクの冗長コピーをスケジュールします。このプロセスは、投機的実行として知られています。タスクが完了すると、この事実がJobTrackerに通知されます。どのタスクのコピーが最初に終了しても、確定コピーになります。他のコピーが投機的に実行されていた場合、HadoopはTaskTrackersにタスクを破棄して出力を破棄するように指示します。 Reducersはマッパーが正常に完了した時点から入力を受け取ります。

投機実行は、デフォルトで有効になっています。新しいAPIではmapreduce.map.speculativemapreduce.reduce.speculativeを変更することが考えられますが、mapred.map.tasks.speculative.executionmapred.reduce.tasks.speculative.executionのJobConfオプションをfalseに設定することで、マッパーとレデューサーの投機実行を無効にすることができます。

あなたの質問に答えるために、それは新たに始まり、他のタスクがどれだけ完了/完了したかとは関係ありません。

参考:あなたがシステム全体のレベルで完全に投機的なタスクの実行を無効にした場合http://developer.yahoo.com/hadoop/tutorial/module4.html

+3

私は、 'mapreduce.map.speculative'と' mapreduce.reduce.speculative'がそれぞれ 'mapred.map.tasks.speculative.execution'と' mapred.reduce.tasks.speculative.execution'のより新しい同等物だと考えています。 –

関連する問題