hadoop—hdfs中参数“mapred.min.split.size”的行为

d8tt03nd  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(358)

参数“mapred.min.split.size”更改先前写入文件的块的大小?假设在开始作业时,传递值为134217728(128mb)的参数“mapred.min.split.size”。对发生的事情该怎么说?
1-每个map处理相当于2个hdfs块(假设每个块64mb);
2-将有一个新的分区我的输入文件(以前包括hdfs)占用块在hdfs 128m;

zaq34kh6

zaq34kh61#

拆分大小由formula:-

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

在您的情况下,它将是:-

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

如此之高inference:-
每个map将处理2个hdfs块(假设每个块64mb):true
我的输入文件(以前包含的hdfs)将有一个新的分区来占用hdfs128m中的块:false
但使最小分割大小大于块大小会增加分割大小,但会以局部性为代价。

kadbb459

kadbb4592#

假设最小分割大小定义为128mb,最小块大小定义为64mb。
注意:由于默认情况下每个数据块将由hdfs复制到3个不同的datanode。此外,每个map任务在单个块上执行其操作。
因此,128mb的分割大小将2个块视为一个块,并为其创建一个将在单个datanode上运行的Map任务。这是以数据局部性为代价的。通过“数据局部性成本”,我指的是驻留在没有运行map任务的datanode上的块。它必须从该datanode获取并在运行map任务的datanode上处理,从而导致性能降低。
但是,如果我们考虑大小为128mb的文件,默认块大小为64mb,默认最小拆分大小为64mb,那么在这种情况下,通常会为每个64mb的块创建两个Map任务。

相关问题