2011-07-20 30 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

相关问题