2

1000 個のマップ タスクを生成する MapReduce ジョブを考えてみましょう。ブロックサイズ: 128MB 最小分割サイズ: 1MB 最大分割サイズ: 256MB

ブロックサイズが限界値のようです。ブロック サイズを超えて分割サイズを大きくすることはできますか?

これは FileInputFormat.java の関数です。

protected long computeSplitSize(long goalSize, long minSize, long blockSize) {
    return Math.max(minSize, Math.min(goalSize, blockSize));
}

上記の関数に基づいて、ブロックサイズより大きい最小分割サイズは、私が望むことを行います。この方法で最小分割サイズを設定することの副作用に誰かが光を当てることができますか?

4

1 に答える 1

0

goalSizeこれについては、合計入力サイズを で割ったものを指すことを理解する必要がありますJobConf.getNumMapTasks()。この計算の意味は次のとおりです。

  • 分割は、ファイルまたはminSize.
  • goalSize分割は、との小さい方よりも大きくなりませんblockSize

これを踏まえると、フレームワークが分割を処理するタスクにデータの局所性を提供できるため、理想的な分割サイズは正確に 1 ブロック サイズであることが理解できます。(出典: Pro Hadoop )

ブロック サイズを超えて分割サイズを大きくしたい場合、これは各マッパーがローカルではないデータを読み取るためにリモート読み取りを行う必要があることを意味するため、効率が低下する可能性があります。ただし、大きな分割を作成しようとしている場合を除き、これがパフォーマンスに重大な影響を与えるとは思えません。これが機能しない確実なユースケースがない限り、可能な限りデフォルトの分割サイズを維持することをお勧めします。

于 2013-02-09T01:31:18.140 に答える