【问题标题】:Multiple files as input on Amazon Elastic MapReduce多个文件作为 Amazon Elastic MapReduce 上的输入
【发布时间】:2011-10-09 12:28:27
【问题描述】:

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

【问题讨论】:

  • 另外,如何从代码中列出 s3 目录中的文件?然后我可以从这些文件中生成路径。
  • 现在可以使用了!在同一个存储桶中有一个名为compressed 的空文件。我一删除空文件,程序就开始工作了。

标签: java amazon-emr


【解决方案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());
        }

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

【讨论】:

  • 感谢您的回复。该问题后来得到解决。在同一个存储桶中有一个名为压缩的空文件。我一删除空文件,程序就开始工作了。
猜你喜欢
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 2014-08-06
  • 1970-01-01
相关资源
最近更新 更多