如何以递归方式在新的Hadoop API中使用目录结构?

时间:2014-10-30 08:13:47

标签: hadoop recursion hdfs

我的文件结构如下:

/indir/somedir1/somefile
/indir/somedir1/someotherfile...
/indir/somedir2/somefile
/indir/somedir2/someotherfile...

我现在想要将所有内容递归传递到MR作业,我正在使用新的API。所以我做了:

FileInputFormat.setInputPaths(job, new Path("/indir"));

但是这项工作失败了:

Error: java.io.FileNotFoundException: Path is not a file: /indir/somedir1

我正在使用Hadoop 2.4,在this post中声明Hadoop 2的新API不支持递归文件。但我想知道这是怎么回事,因为我认为在Hadoop工作中抛出大型嵌套目录结构是世界上最普通的事情......

那么,这是故意还是错误?在两种方式中,除了使用旧API之外还有其他解决方法吗?

2 个答案:

答案 0 :(得分:15)

我自己找到了答案。在上述论坛帖子中链接的JIRA中,有两条关于如何正确完成的评论:

  1. mapreduce.input.fileinputformat.input.dir.recursive设置为true(评论状态为mapred.input.dir.recursive,但已弃用)
  2. 使用FileInputFormat.addInputPath指定输入目录
  3. 通过这些更改,它可以正常工作。

答案 1 :(得分:1)

配置它的另一种方法是通过FileInputFormat类。

FileInputFormat.setInputDirRecursive(job, true);