创建输入拆分 (HADOOP)
Creating input splits (HADOOP)
我有一个大小为 39MB 的文件,我将块大小设置为 36MB。当文件上传到 HDFS 时,它成功地将文件存储在两个块中。现在,当我在这个文件上 运行 一个 Map-Reduce 作业(简单的读取作业)时,作业计数器显示:
“信息mapreduce.JobSubmitter:splits:1的数量”
也就是把2个block看成一个split,于是我查了一下split size的计算公式如下:
split size = max(minsize,min(maxsize,blocksize))
其中 minsize=mapreduce.input.fileinputformat.split.minsize 和 maxsize=minsize=mapreduce.input.fileinputformat.split.maxsize.
现在在我的 MR 代码中我设置了以下属性:
Configuration conf = new Configuration()
conf.set("mapreduce.input.fileinputformat.split.minsize","1")
conf.set("mapreduce.input.fileinputformat.split.maxsize","134217728")
那是最小大小=1 字节和最大大小=128 MB,所以根据公式,分割大小应该是 36MB,因此应该有两个分割,但我仍然得到相同的计数器输出:
"信息mapreduce.JobSubmitter:splits:1"的数量
谁能解释为什么?
文件的最后一次拆分可以溢出 10%。
这称为 SPLIT_SLOP
并设置为 1.1
.
在这种情况下,
39MB (Remaining Bytes) / 36MB (Input Split Size) = 1.08 is less than 1.1 (SPLIT_SLOP)
因此整个文件被视为一个拆分。
关于如何拆分的片段,
long bytesRemaining = FileSize;
while (((double) bytesRemaining)/splitSize > SPLIT_SLOP) {
String[][] splitHosts = getSplitHostsAndCachedHosts(blkLocations,length-bytesRemaining, splitSize, clusterMap);
splits.add(makeSplit(path, length-bytesRemaining, splitSize,splitHosts[0], splitHosts[1]));
bytesRemaining -= splitSize;
}
参考getSplits()方法了解每个文件的拆分方式。
我有一个大小为 39MB 的文件,我将块大小设置为 36MB。当文件上传到 HDFS 时,它成功地将文件存储在两个块中。现在,当我在这个文件上 运行 一个 Map-Reduce 作业(简单的读取作业)时,作业计数器显示: “信息mapreduce.JobSubmitter:splits:1的数量”
也就是把2个block看成一个split,于是我查了一下split size的计算公式如下:
split size = max(minsize,min(maxsize,blocksize))
其中 minsize=mapreduce.input.fileinputformat.split.minsize 和 maxsize=minsize=mapreduce.input.fileinputformat.split.maxsize.
现在在我的 MR 代码中我设置了以下属性:
Configuration conf = new Configuration()
conf.set("mapreduce.input.fileinputformat.split.minsize","1")
conf.set("mapreduce.input.fileinputformat.split.maxsize","134217728")
那是最小大小=1 字节和最大大小=128 MB,所以根据公式,分割大小应该是 36MB,因此应该有两个分割,但我仍然得到相同的计数器输出:
"信息mapreduce.JobSubmitter:splits:1"的数量
谁能解释为什么?
文件的最后一次拆分可以溢出 10%。
这称为 SPLIT_SLOP
并设置为 1.1
.
在这种情况下,
39MB (Remaining Bytes) / 36MB (Input Split Size) = 1.08 is less than 1.1 (SPLIT_SLOP)
因此整个文件被视为一个拆分。
关于如何拆分的片段,
long bytesRemaining = FileSize;
while (((double) bytesRemaining)/splitSize > SPLIT_SLOP) {
String[][] splitHosts = getSplitHostsAndCachedHosts(blkLocations,length-bytesRemaining, splitSize, clusterMap);
splits.add(makeSplit(path, length-bytesRemaining, splitSize,splitHosts[0], splitHosts[1]));
bytesRemaining -= splitSize;
}
参考getSplits()方法了解每个文件的拆分方式。