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.
  • 拆分不会大于 和 中的较小goalSizeblockSize

鉴于此,您可以理解理想的拆分大小恰好是 1 个块大小,因为它允许框架为处理拆分的任务提供数据局部性。(来源:Pro Hadoop

如果您想将分割大小增加到块大小之外,这意味着每个映射器都需要进行远程读取来读取非本地数据,因此效率可能会降低。但除非你试图制造巨大的分裂,否则我怀疑这会对性能产生重大影响。我仍然建议尽可能保持默认拆分大小,除非您有一个可靠的用例,这不起作用。

于 2013-02-09T01:31:18.140 回答