GoogleのMapReduceの論文では、バックアップタスクがあります。これは、Hadoopの投機的なタスクと同じだと思います。投機的なタスクはどのように実装されますか?投機的なタスクを開始するとき、タスクは最初から古くてゆっくりと開始しますか、それとも古いタスクが到達したところから開始しますか(そうであれば、すべての中間ステータスとデータをコピーする必要がありますか?)
1 に答える
Hadoop システムの問題の 1 つは、タスクを多数のノードに分割することにより、少数の低速ノードが残りのプログラムのレートを制限する可能性があることです。
ハードウェアの劣化やソフトウェアの設定ミスなど、さまざまな理由でタスクが遅くなることがありますが、予想よりも長い時間が経過してもタスクが正常に完了するため、原因を検出するのが難しい場合があります。Hadoop は、実行速度の遅いタスクを診断して修正しようとはしません。代わりに、タスクの実行速度が予想よりも遅い場合に検出を試み、別の同等のタスクをバックアップとして起動します。これは、タスクの投機的実行と呼ばれます。
たとえば、1 つのノードに低速のディスク コントローラがある場合、他のすべてのノードの 10% の速度で入力を読み取っている可能性があります。そのため、99 個のマップ タスクが既に完了している場合でも、システムは最後のマップ タスクのチェックインを待機しており、他のすべてのノードよりもはるかに時間がかかります。
タスクを相互に分離して実行することを強制することで、個々のタスクは入力がどこから来るのかわかりません。タスクは Hadoop プラットフォームを信頼して、適切な入力を提供するだけです。したがって、マシンの機能の違いを利用するために、同じ入力を複数回並行して処理できます。ジョブのほとんどのタスクが終わりに近づいているため、Hadoop プラットフォームは、他に実行する作業がない複数のノードにまたがる残りのタスクの冗長コピーをスケジュールします。このプロセスは、投機的実行として知られています。タスクが完了すると、この事実が JobTracker に通知されます。タスクのどちらのコピーが最初に終了しても、最終的なコピーになります。他のコピーが投機的に実行されていた場合、Hadoop は TaskTracker にタスクを放棄してその出力を破棄するように指示します。
投機的実行はデフォルトで有効になっています。mapred.map.tasks.speculative.execution
古い API を使用してmapred.reduce.tasks.speculative.execution
JobConf オプションを false に設定することで、マッパーとリデューサーの投機的実行を無効にすることができます。新しい API では、 と を変更することを検討しmapreduce.map.speculative
てくださいmapreduce.reduce.speculative
。
したがって、あなたの質問に答えるために、それは新たに始まり、他のタスクがどれだけ完了/完了したかとは何の関係もありません.