java - 获取Hadoop Mapper中的总输入路径计数

标签 java hadoop mapreduce

我们正在尝试获取MapReduce程序正在我们的映射器中迭代的输入路径的总数。我们将使用它和一个计数器来根据索引格式化我们的值。有没有一种简单的方法可以从映射器中提取总输入路径数?提前致谢。

最佳答案

您可以浏览FileInputFormat.getSplits()的源代码-这会拉回mapred.input.dir的配置属性,然后将此CSV解析为路径数组。

这些路径仍然可以表示文件夹和正则表达式,因此getSplits()的下一步是将数组传递给 protected 方法org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(JobContext)。这实际上遍历了dirs / regex列出的内容,并列出了目录/ regex匹配文件(如果已配置,还调用了PathFilter)。

因此,在此方法 protected 情况下,您可以创建一个简单的FileInputFormat'dummy'扩展名,该扩展名具有listStatus方法,接受Mapper.Context作为其参数,然后包装对FileInputFormat.listStatus方法的调用:

public class DummyFileInputFormat extends FileInputFormat {
    public List<FileStatus> listStatus(Context mapContext) throws IOException {
        return super.listStatus(mapContext);
    }

    @Override
    public RecordReader createRecordReader(InputSplit split,
            TaskAttemptContext context) throws IOException,
            InterruptedException {
        // dummy input format, so this will never be called
        return null;
    }
}

编辑:实际上,FileInputFormat似乎已经为您完成了此工作,在getSplits()方法的末尾配置了作业属性mapreduce.input.num.files(至少在1.0.2中,可能是在0.20.203中引入的)

Here's the JIRA ticket

关于java - 获取Hadoop Mapper中的总输入路径计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10585560/

相关文章:

java - 根本原因 java.lang.ClassNotFoundException : com. mysql.jdbc.Driver

java - Selenium 重复元素标记为 ==$0

java - 如何找到玩家上传数据中最大的值(value)

java - 如何通过servlet提交WordCount.jar到hadoop

hadoop - HDFS 名称节点高可用性

hadoop - 如何选择Hadoop工具以获得更快的性能

java - 在 Spring 中创建可重用的 GUI 组件

java - 在MacOS High Sierra上设置Hadoop单节点时遇到问题

java - MapReduce问题

hadoop - 我可以将输入的Mapper设置为hashMap而不是输入文件