2013-05-08 38 views
6

当我设置fileinputFormat作为hadoop输入。 arg[0]+"/*/*/*"表示不匹配任何文件。可以hadoop从多个目录和文件采取输入

什么,我想是从多个文件为已读:

 
Directory1 
---Directory11 
    ---Directory111 
     --f1.txt 
     --f2.txt 
---Directory12 
Directory2 
---Directory21 

是否有可能在Hadoop中? 谢谢!

回答

3

您可以使用*****运算符从多个目录和文件中获取输入。很有可能是因为“arg [0]”参数不正确,因此找不到文件。

作为替代方案,您也可以使用InputFormat.addInputPath,或者如果您需要单独的格式或映射器,则可以使用MultipleInputs类。

的基本添加路径

FileInputFormat.addInputPath(job, myInputPath); 

这里实施例是MultipleInputs

MultipleInputs.addInputPath(job, inputPath1, TextInputFormat.class, MyMapper.class); 
MultipleInputs.addInputPath(job, inputPath2, TextInputFormat.class, MyOtherMapper.class); 

的一例这另一个问题是也非常相似,并且具有良好的答案,Hadoop to reduce from multiple input formats

+0

所以它会从一个文件夹中的多个文件夹读取并递归地读取每个子文件夹中的许多文件? – JudyJiang 2013-05-08 16:52:46

+0

我错了,并更新了我的答案以反映这一点。我猜你的“arg [0]”是错误的。你从哪里使用?如果它的命令行可能需要$ arg [0],如果它来自代码,则应该使用multipleinputs方法 – greedybuddha 2013-05-08 17:07:32

+0

它在我的java代码中。我使用FileInputFormat.setInputPaths(conf,new Path(args [0]);它是args [0],并且它之后我应该替换多个目录部分? – JudyJiang 2013-05-08 18:22:53