2

私は次のwikiを読みましたが、まだ1つのことを明確にすることができません.

https://wiki.apache.org/hadoop/HadoopMapReduce

たとえば、2 つの HDFS ブロックに分割された大きなファイルがあり、ブロックが 2 つの異なるマシンに物理的に保存されているとします。両方のブロックをローカルにホストするノードがクラスター内にないことを考慮してください。私が理解したように、TextInputFormat HDFS ブロック サイズは通常、分割サイズと同じです。2 つの分割があるため、ブロックをローカルに保持する 2 つの別々のマシンで 2 つのマップ インスタンスが生成されます。ここで、HDFS テキスト ファイルが行の途中で壊れてブロックを形成したとします。Hadoop はブロック 2 を 2 番目のマシンから最初のマシンにコピーして、2 番目のブロックから最初の行 (壊れた半分) を提供し、最初のブロックの最後の壊れた行を完成させることができますか?

4

1 に答える 1

4

ここで、HDFS テキスト ファイルが行の途中で壊れてブロックを形成したとします。Hadoop はブロック 2 を 2 番目のマシンから最初のマシンにコピーして、2 番目のブロックから最初の行 (壊れた半分) を提供し、最初のブロックの最後の壊れた行を完成させることができますか?

Hadoop はマップ タスクを実行しているノードにブロックをコピーしません。ブロックはデータ ノードからタスク ノードにストリーミングされます (4kb などの適切な転送ブロック サイズで)。したがって、あなたが与える例では、最初のブロックを処理したマップタスクは最初のブロック全体を読み取り、次に行末文字が見つかるまで2番目のブロックをストリーム読み取りします。したがって、おそらく「ほとんど」ローカルです。

2 番目のブロックがどれだけ読み取られるかは、行の長さによって異なります。3 つのブロックに分割されたファイルが 3 つのマップ タスクによって処理され、2 番目のマップ タスクは基本的にレコードを処理しない可能性があります (ただし、行がブロック 1 で始まり、ブロック 3 で終わる場合、ブロック 2 と 3 の一部)。

これが理にかなっていることを願っています

于 2013-06-28T01:12:08.633 に答える