我有两个MapReduce作业,第一个Reducer的输出是第二个Mapper的输入:

Map1 -> Reduce1 -> Map2 -> Reduce2

现在Map2Reduce1输出的文件中读取。因此Map1 -> Reduce1Map2 -> Reduce2是独立的。

它可以工作,但是会更容易,而且如果Reduce1的输出直接是Map2的输入,那么我认为它会更优化。

有没有办法做到这一点 ?在这种情况下,Map2只是一个身份映射器,所以如果我可以做的话会更好:
Map1 -> Reduce1 -> Reduce2

Reduce1,Map2和Reduce2具有相同的输入和输出类型。

谢谢 !

最佳答案

根据我的理解,我可以告诉您这些观点(可能对您有所帮助,如果我错了,请纠正我):

1)映射1->缩小1->直接映射到mapper2:对于优化,在Spark集群计算框架中进行了解决(使用内存中的计算,避免了对hdfs的不必要的读/写操作)。

2)如果您想要诸如reducer1-> reducer2之类的东西。您必须考虑如何在一个reducer本身中编写逻辑,但是这里的问题是,这完全取决于您的要求,我的意思是要对哪些键进行聚合(更详细地讲:reducer1接收相同的键集,只有您才能执行下一个汇总的任务)。

3)在Hadoop中,该协议(protocol)仅类似于:map->然后聚合,如果有任何下一个聚合,则该协议(protocol)必须来自Userdefinedmapper / IdentityMapper。

希望这可以帮助 :)

07-26 09:29