我的文件结构如下:
/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之外还有其他解决方法吗?
答案 0 :(得分:15)
我自己找到了答案。在上述论坛帖子中链接的JIRA中,有两条关于如何正确完成的评论:
mapreduce.input.fileinputformat.input.dir.recursive
设置为true
(评论状态为mapred.input.dir.recursive
,但已弃用)FileInputFormat.addInputPath
指定输入目录通过这些更改,它可以正常工作。
答案 1 :(得分:1)
配置它的另一种方法是通过FileInputFormat
类。
FileInputFormat.setInputDirRecursive(job, true);