フレームワークは、処理をできるだけローカルに保つために最善を尽くします。しかし、これに従わない場合もあります。1つは明らかにスロットが利用できないことです。もう 1 つのケースは、InputSplit が複数のブロックにまたがり、各ブロックが異なるマシンに存在する場合です。このような場合、InputSplit の他の部分は、この InputSplit の Mapper が開始されたノードに移動され、ブロック全体が 1 つの Mapper によって処理されるようになります。
ローカル マッパー タスクの実行は制約ですか、それとも単なる優先事項ですか?
それは制約ではありません。物事をより効率的にするだけです。そうしないと、BigData を処理するためにここから別の場所に移動するのはどれほど非効率的でしょうか。これは、Hadoop の基本原則の 1 つです。
はいの場合、ブロックをローカル ディスクにコピーすることにより、マッパー タスクが他のマシンでも実行されるように構成することは可能ですか?
どうしてそうするか?同じブロックの複数のレプリカでマッパーを本当に実行したい場合は、ブロックをある場所から別の場所にコピーする代わりに、投機的実行を true に切り替えることができます。これにより、複数のマシンの同じブロックで複数のマッパーが実行され、最速のマッパーから出力が得られます。
2 番目の質問は、マッパー タスクが 1 台のマシンでのみ実行されている場合でも、マッパーの中間データをコピーすることによって他のすべてのマシンでレデューサーが開始されるというのは正しいですか?
レデューサーは、空きスロットがある任意のノードで開始できます。ただし、必ずしもすべてのマシンではありません。