2

いくつかの大きなファイルを含む HDFS クラスターを使用していgzipます。

このデータ ノードから HDFS に書き込むことで、これらのファイルのすべてのブロックがgzip同じ DataNode 上にあることを確認しました。

for i in {1..10}; do
    scp file$i.gz datanode1:
    ssh datanode$i hadoop fs -put file$i.gz /data/
done

ここで、これらすべてのファイルに対して mapreduce タスクを実行したいと考えています。

JobTracker は、すべてのブロックがある で処理file1するジョブを配置することを期待しています。datanode1

確かに、データノードが死ぬと局所性が失われますが、死ぬまで機能しますか?

そのように機能しない場合は、それができるように書くことはできFileInputFormatますか?

4

1 に答える 1

0

GZip は分割可能な圧縮形式ではありません (gzip ファイルを端から端までスタックする場合)。そのため、最初に gzip ファイルのブロック サイズが実際のファイル サイズと同じか大きいことを確認します。

gzip ファイルは分割できないため、ブロック サイズが 256m の 1G の gzip ファイルがある場合、このファイルのすべてのブロックが同じデータノードに存在しない可能性があります (データノードの 1 つからアップロードした場合でも、時間の経過とともに障害が発生した場合、ブロックが他のノードに移動しないという保証はありません)。この場合、タスクが実行されているノードに非常駐のブロックがある場合、ジョブ トラッカーはローカル マップ タスクを報告しません。

タスクの割り当てについては、datanode1 に 4 つのマップ スロットがあり、処理するファイルが 100 個ある場合、ジョブ トラッカーは datanode1 で 100 個のタスクすべてを実行するわけではありません。そのノードに空きタスク スロットがあり、そのノードに分割された場所がある map タスクがある場合、datanode1 でタスクを実行しようとしますが、これらの 4 つのスロットが使用されると、JT は他のタスク トラッカーに実行を指示します。同じノードで 100 個のタスクすべてを実行するのを待つのではなく、ジョブ (空きスロットがある場合) を実行します。

はい、データ ノードが停止した場合、ブロック サイズがファイルよりも小さい場合 (最初の文で述べた理由により)、おそらくデータの局所性が失われますが、ブロック サイズがファイルと同じか大きい場合は、そのブロックのレプリカを持つすべてのデータ ノードにデータの局所性があります。

于 2013-05-13T10:47:11.073 に答える