我们可以为fileinputformat定制inputsplit大小吗

bogh5gae  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(274)

让我们考虑一个mapreduce作业,它生成1000个map任务。块大小:128mb最小拆分大小:1mb最大拆分大小:256mb
块大小似乎是限制值。我们能把分割的大小增加到块的大小以外吗?
这是fileinputformat.java中的函数

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

基于以上函数最小分割大小大于块大小将做我想要的。有人能解释一下这样设置最小分割大小的副作用吗?

rjee0c15

rjee0c151#

为此你必须明白 goalSize 指总输入大小除以 JobConf.getNumMapTasks() . 这个计算意味着:
分割将不小于文件或文件中的剩余数据 minSize .
一个分裂将不大于二者中的较小者 goalSize 以及 blockSize .
有鉴于此,您可以理解理想的分割大小正好是1块大小,因为它允许框架为处理分割的任务提供数据局部性(图片来源:pro hadoop)
如果要将分割大小增加到块大小之外,这意味着每个Map器都需要执行远程读取来读取非本地的数据,因此这可能会降低效率。但是,除非你试图制造巨大的分裂,我怀疑这将有一个关键的性能影响。我仍然建议尽可能保持默认的拆分大小,除非您有一个可靠的用例,这样做行不通。

相关问题