Hadoop MapReduce:可以在一个 hadoop 作业类中定义两个映射器和缩减器吗?

2024-03-20

我有两个独立的 java 类,用于执行两个不同的 MapReduce 作业。我可以独立运行它们。对于这两个作业,它们所操作的输入文件是相同的。所以我的问题是是否可以在一个java类中定义两个映射器和两个缩减器,例如

mapper1.class
mapper2.class
reducer1.class
reducer2.class

然后喜欢

job.setMapperClass(mapper1.class);
job.setmapperClass(mapper2.class);
job.setCombinerClass(reducer1);
job.setCombinerClass(reducer2);
job.setReducerClass(reducer1);
job.setReducerClass(reducer2);

这些设置的方法实际上会覆盖以前的方法还是添加新的方法?我尝试了代码,但它只执行最新的给定类,这让我认为它会覆盖。但一定有办法做到这一点吧?

我问这个问题的原因是我只能读取输入文件一次(一个 I/O),然后处理两个 MapReduce 作业。我还想知道如何将输出文件写入两个不同的文件夹。目前,这两个作业是独立的,并且需要输入和输出目录。


你可以有多个mapper,但在一项作业中,你只能有一个reducer。您需要的功能是MultipleInput, MultipleOutput and GenericWritable.

Using MultipleInput,可以设置mapper和对应的inputFormat。这是我的post http://www.lichun.cc/blog/2012/05/hadoop-multipleinputs-usage/关于如何使用它。

Using GenericWritable,您可以在reducer中分离不同的输入类。这是我的post http://www.lichun.cc/blog/2012/05/hadoop-genericwritable-sample-usage/关于如何使用它。

Using MultipleOutput,你可以在同一个reducer中输出不同的类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hadoop MapReduce:可以在一个 hadoop 作业类中定义两个映射器和缩减器吗? 的相关文章

随机推荐