2013-10-04 7 views
5

パラメータ "mapred.min.split.size"は、ファイルが以前に書き込まれたブロックのサイズを変更しますか? 私がJOBを起動するときに、パラメータ "mapred.min.split.size"を134217728(128MB)の値で渡すと仮定します。 何が起こるかについては何が正しいと思いますか?HDFSにおけるパラメータ "mapred.min.split.size"の動作

1 - 各MAP処理は、2つのHDFSブロックに相当します(各ブロックは64MBと仮定します)。

2 - HDFS 128Mのブロックを占有するために、私の入力ファイル(以前はHDFSを含む)の新しい部分があります。

答えて

27

分割サイズは、次の式で計算されます - あなたのケースでは

max(mapred.min.split.size, min(mapred.max.split.size, dfs.block.size)) 

は、それは次のようになります -

split size=max(128,min(Long.MAX_VALUE(default),64)) 

だから、推論上記: -

  1. 各マップ2hdfsブロックを処理します(各ブロックが64MBであると仮定します)。True

  2. HDFS 128M内のブロックを占有する(以前にHDFSを含む)私の入力ファイルの新しい部門があります:

が、ブロックサイズが増加よりも、最小分割サイズが大きい作り分割されたサイズですが、地域を犠牲にしています。

+0

ありがとうございました – Alexandre

+0

間違いなく役立ちました! – wakensky

+0

[値はバイト単位であることに注意してください(https://github.com/linkedin/dr-elephant/wiki/Tuning-Tips#mapreduceinputfileinputformatsplitminsize)、メガバイトではありません。 128MBの場合、mapreduce.input.fileinputformat.split.minsize = 134217728を指定する必要があります。 –

0

分割サイズの最小値は128mb、最小ブロックサイズは64mbとします。

注:各ブロックは、デフォルトでHDFSによって3つの異なるデータノードに複製されるため、また、各マップタスクは、単一ブロック上でその動作を実行する。

したがって、128メガバイトの分割サイズでは、1ブロックとして2ブロックが考慮され、1つのデータノードで実行される1つのマップタスクが作成されます。これは、データの局所性を犠牲にして発生します。 「データローカリティのコスト」によって、マップタスクが実行されていないデータノードに存在するブロックについて話しています。そのデータノードからフェッチされ、マップタスクが実行されているデータノードで処理されるため、パフォーマンスが低下します。

しかし、デフォルトのブロックサイズが64mbで、デフォルトの最小分割サイズが64mbのファイルをサイズ128mbと見なすと、通常は64mbのブロックごとに2つのマップタスクが作成されます。

関連する問題