2014-10-30 75 views
4

我的文件結構如下:在新的Hadoop API中如何遞歸地使用目錄結構?

/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?

回答

14

我自己找到了答案。在所提到的論壇帖子鏈接的JIRA,還有它是如何做正確的兩點意見:

  1. 設置mapreduce.input.fileinputformat.input.dir.recursivetrue(註釋狀態mapred.input.dir.recursive但已過時)
  2. 使用FileInputFormat.addInputPath指定輸入目錄

隨着這些變化,它的工作原理。

+1

好的發現兄弟。你爲什麼不接受答案並加以封印! – blackSmith 2014-10-30 09:12:45

+0

因爲StackOverflow只允許我在兩天內接受答案。 – rabejens 2014-10-30 13:37:12

0

另一種配置方法是通過FileInputFormat類。

FileInputFormat.setInputDirRecursive(job, true);