从MultipleInputs获取所有输入路径

时间:2015-01-03 16:28:02

标签: hadoop mapreduce

我的一个mapreduce作业正在使用MultipleInputs。作业完成后,我想删除输入文件。不幸的是,MultipleInputs的API非常有限,并且不提供FileInputFormat FileInputFormat.getInputPaths()等功能。

我研究了Hadoop的源代码,看起来我应该能够从mapreduce.input.multipleinputs.dir.formats获得所有路径,但这对我来说总是空的。

当然,我可以将所有输入路径存储在“一边”,但我确信必须有办法从Hadoops API中获取它。

    for(Path path : getParsedSitesToMerge(conf, crawlPath)) {
                MultipleInputs.addInputPath(job, path, SequenceFileInputFormat.class, InjectLinkMapper.class);
                System.out.println(path.toString());
                System.out.println(MultipleInputs.DIR_FORMATS + ": " + conf.get(MultipleInputs.DIR_FORMATS));
}

输出

file:/tmp/crawl1/link_db/links/parsed_1420300287148
mapreduce.input.multipleinputs.dir.formats: null
file:/tmp/crawl1/link_db/links/parsed_1420300308993
mapreduce.input.multipleinputs.dir.formats: null

1 个答案:

答案 0 :(得分:0)

请参阅MultipleInputs的this部分代码:

 public static final String DIR_FORMATS = "mapreduce.input.multipleinputs.dir.formats";
 public static void addInputPath(Job job, Path path,
 Class<? extends InputFormat> inputFormatClass) {
      String inputFormatMapping = path.toString() + ";" + inputFormatClass.getName();
      Configuration conf = job.getConfiguration();
      String inputFormats = conf.get(DIR_FORMATS);
      conf.set(DIR_FORMATS,
           inputFormats == null ? inputFormatMapping : inputFormats + ","
           + inputFormatMapping);
      job.setInputFormatClass(DelegatingInputFormat.class);
 }

当你从驱动程序代码中说addInputPath时,你可以找出使用String mappers = conf.get("mapreduce.input.multipleinputs.dir.formats");来获取上面代码中添加的所有路径。