当对多个输入文件完成 mapreduce 任务时,hadoop 如何确定映射器或输入拆分的数量?
How does the hadoop fix the number of mappers or Input splits when mapreduce task is done over multiple input files?
我有四个输入文件 (CSV),大小分别为 453MB、449MB、646MB 和 349MB。所有这些构成了 1.85GB 的总大小。
HDFS 块大小为 128MB。
记录大小非常小,因为几乎没有 20 个字段。
完成 mapreduce 任务后,我可以观察到 16 个映射器已用于我提供的输入文件:
我想知道 hadoop 如何确定多个输入文件的映射器或输入拆分的数量?
地图的数量通常由输入文件中的 HDFS 块数量决定。 Mappers 的数量是根据拆分的数量计算的,但是如果文件小于拆分大小,则每个文件将对应一个 mapper。
对于每个输入文件,根据文件长度和块大小,hadoop 将分割大小计算为 max(minSize, min(maxSize, blockSize)) 其中 maxSize 对应于 mapred.max.split.size,minSize 为 mapred.min.split.size.
没有。映射器=每个文件大小/inputSplitSize
这里是关于 apache wiki 上映射器和缩减器数量的参考 http://wiki.apache.org/hadoop/HowManyMapsAndReduces
除非您使用 CombileFileInputFormat
.
,否则每个文件都会单独进行拆分(基于拆分大小)
假设 mapreduce.input.fileinputformat.split.minsize
和 mapreduce.input.fileinputformat.split.maxsize
属性处于默认状态。那么拆分大小将大约等于 dfs.blocksize
.
所以,在这种情况下
File 1: 453MB = 4 splits
File 2: 449MB = 4 splits
File 3: 646MB = 5 splits (boundary being very close ~640MB)
File 4: 349MB = 3 splits
总共16个拆分。每次拆分一个映射器,总共会生成 16 个映射器。另请参阅此 以获取拆分大小计算公式。
更新:虽然文件 3 有 6 个块,但第 6 个块将保留为第 5 个分割的一部分。这由 SPLIT_SLOP
因素决定,默认情况下为 1.1(最后一个溢出 10% 的块)。
我有四个输入文件 (CSV),大小分别为 453MB、449MB、646MB 和 349MB。所有这些构成了 1.85GB 的总大小。 HDFS 块大小为 128MB。 记录大小非常小,因为几乎没有 20 个字段。 完成 mapreduce 任务后,我可以观察到 16 个映射器已用于我提供的输入文件:
我想知道 hadoop 如何确定多个输入文件的映射器或输入拆分的数量?
地图的数量通常由输入文件中的 HDFS 块数量决定。 Mappers 的数量是根据拆分的数量计算的,但是如果文件小于拆分大小,则每个文件将对应一个 mapper。
对于每个输入文件,根据文件长度和块大小,hadoop 将分割大小计算为 max(minSize, min(maxSize, blockSize)) 其中 maxSize 对应于 mapred.max.split.size,minSize 为 mapred.min.split.size.
没有。映射器=每个文件大小/inputSplitSize
这里是关于 apache wiki 上映射器和缩减器数量的参考 http://wiki.apache.org/hadoop/HowManyMapsAndReduces
除非您使用 CombileFileInputFormat
.
假设 mapreduce.input.fileinputformat.split.minsize
和 mapreduce.input.fileinputformat.split.maxsize
属性处于默认状态。那么拆分大小将大约等于 dfs.blocksize
.
所以,在这种情况下
File 1: 453MB = 4 splits
File 2: 449MB = 4 splits
File 3: 646MB = 5 splits (boundary being very close ~640MB)
File 4: 349MB = 3 splits
总共16个拆分。每次拆分一个映射器,总共会生成 16 个映射器。另请参阅此
更新:虽然文件 3 有 6 个块,但第 6 个块将保留为第 5 个分割的一部分。这由 SPLIT_SLOP
因素决定,默认情况下为 1.1(最后一个溢出 10% 的块)。