2011-07-20 60 views
6

我試圖在Elastic MapReduce(EMR)上用自定義JAR運行一個作業。我試圖在一個目錄中處理大約1000個文件。當我使用參數s3n://bucketname/compressed/*.xml.gz提交作業時,出現「匹配的0個文件」錯誤。如果我只傳遞文件的絕對路徑(例如s3n://bucketname/compressed/00001.xml.gz),它運行良好,但只處理一個文件。我嘗試使用目錄名稱(s3n://bucketname/compressed/),希望內部的文件將被處理,但只是將目錄傳遞給作業。在Elastic MapReduce上輸入多個文件

同時,我有一個較小的本地hadoop安裝。在那裏,當我通過我的作業通配符(/path/to/dir/on/hdfs/*.xml.gz),它工作正常,所有1000個文件都正確列出。

如何讓EMR列出我的所有文件?

+0

或者,我如何從代碼中列出s3目錄中的文件?然後我可以從這些文件中生成路徑。 –

+1

它現在有效!在同一個桶中有一個名爲「compressed」的空文件。一旦我刪除了空文件,程序就開始工作。 –

回答

2

我不知道EMR如何列出的所有文件,但這裏有一段代碼,這對我的作品:

 FileSystem fs = FileSystem.get(URI.create(args[0]), job.getConfiguration()); 
     FileStatus[] files = fs.listStatus(new Path(args[0])); 
     for(FileStatus sfs:files){ 
      FileInputFormat.addInputPath(job, sfs.getPath()); 
     } 

它會列出所有在輸入目錄中的文件,並可以做那些你會想要的任何東西

+1

感謝您的回覆。問題稍後解決。在同一個存儲桶中有一個名爲「壓縮」的空文件。一旦我刪除了空文件,程序就開始工作。 –

+0

+1:這對我很有幫助。謝謝! – jldupont