我有两个MapReduce作业,第一个Reducer的输出是第二个Mapper的输入:
Map1 -> Reduce1 -> Map2 -> Reduce2
现在
Map2
从Reduce1
输出的文件中读取。因此Map1 -> Reduce1
和Map2 -> 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。
希望这可以帮助 :)