我正在使用弹性贴图缩小。我想知道如果我在main方法中使用两次完全相同的行会发生什么。
FileInputFormat.addInputPath(job,new Path( “S3N:// mybucket /数据/ lolcat / *”));
hadoop会两次处理相同的文件吗?或者它会发现它们是相同的文件并且会跳过重复的文件吗?
答案 0 :(得分:4)
以下是添加输入路径的来源:
public static void addInputPath(JobConf conf, Path path ) {
path = new Path(conf.getWorkingDirectory(), path);
String dirStr = StringUtils.escapeString(path.toString());
String dirs = conf.get("mapred.input.dir");
conf.set("mapred.input.dir", dirs == null ? dirStr :
dirs + StringUtils.COMMA_STR + dirStr);
}
因此,您可以看到它只是将您的输入附加到 mapred.input.dir 而不查看之前的内容。
除了getSplits
函数只使用List
而不使用Set
,所以如果你有相同的输入路径N次,它将被处理N次。在Hadoop流式传输作业上测试,如果我复制相同的输入路径,我会获得两倍的映射器。