有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java多个文件作为Amazon Elastic MapReduce上的输入

我正试图用一个自定义jar在Elastic MapReduce(EMR)上运行一个作业。我试图在一个目录中处理大约1000个文件。当我使用参数s3n://bucketname/compressed/*.xml.gz提交作业时,会出现“匹配的0个文件”错误。如果我只传递文件的绝对路径(例如s3n://bucketname/compressed/00001.xml.gz),它运行正常,但只处理一个文件。我尝试使用目录名(s3n://bucketname/compressed/),希望其中的文件将被处理,但这只是将目录传递给作业

同时,我有一个较小的本地hadoop安装。在这种情况下,当我用通配符(/path/to/dir/on/hdfs/*.xml.gz)通过我的工作时,它工作正常,所有1000个文件都正确列出

如何让EMR列出我的所有文件


共 (1) 个答案

  1. # 1 楼答案

    我不知道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());
            }
    

    它将列出输入目录中的所有文件,您可以对这些文件执行任何操作