2013-05-08 66 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