我正在尝试使用自定义 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 列出我的所有文件?

请您参考如下方法:

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

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


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!