在 MapReduce 中调用多个具有不同 InputFormatClass 的 Mapper

Posted

技术标签:

【中文标题】在 MapReduce 中调用多个具有不同 InputFormatClass 的 Mapper【英文标题】:Calling more than one Mapper with different InputFormatClass in MapReduce 【发布时间】:2018-03-12 09:50:55 【问题描述】:

我想用三个Mapper 编写一个代码,其中两个将处理".csv" 文件,另一个是".xml"。我已经为.xml 格式从here 写了XmlInputFormat

现在我想知道我应该输入什么

job.setInputFormatClass(...);

还有我应该添加哪个来提供文件路径。

 TextInputFormat.addInputPath(...)
 TextOutputFormat.setInputPath(...)

TextInputFormat.addInputPath(...)
TextOutputFormat.setInputPath(...)

【问题讨论】:

我已经添加了如何使用MultipleInputs 来实现这一点。请检查。 【参考方案1】:

您应该考虑编写两个映射器,一个处理.csv 文件,另一个处理.xml。但是,两个映射器都应该产生key-valuesame type,以便单个reducer 处理它。

下面是一个使用org.apache.hadoop.mapred.lib.MultipleInputs 的示例:

MultipleInputs.addInputPath(jobConf, 
                     new Path(csvFilePath),       
                     SequenceFileInputFormat.class, 
                     CSVProcessingMapper.class);
MultipleInputs.addInputPath(jobConf, 
                     new Path(xmlFilePath), 
                     XmlInputFormat.class, 
                     XMLProcessingMapper.class);

这里的CSVProcessingMapper.classXmlInputFormat.classCSVXML 处理映射器。您可以为不同的输入类型设置尽可能多的映射器。 同样SequenceFileInputFormat.classXmlInputFormat.class类是对应的输入格式类。

【讨论】:

以上是关于在 MapReduce 中调用多个具有不同 InputFormatClass 的 Mapper的主要内容,如果未能解决你的问题,请参考以下文章

在 PIG 中读取带有模式的文件

Excel VBA从另一个具有多个输入,不同大小的输出的子调用子

如何为具有不同公式的多个 glm 调用仅加载一次数据?

Hadoop之MapReduce(TopN和Yarn)

Hadoop之MapReduce(TopN和Yarn)

具有不同参数的多个路由,调用相同的资源