我有两个MapReduce作业,第一个Reducer的输出是第二个Mapper的输入:
Map1 -> Reduce1 -> Map2 -> Reduce2
现在Map2
从Reduce1
输出的文件中读取。因此Map1 -> Reduce1
和Map2 -> Reduce2
是独立的。
它可以工作,但如果Reduce1的输出直接是Map2的输入,它会更容易,我认为更优化。
有办法吗?在这种情况下,Map2
只是一个身份映射器,所以如果我能这样做会更好:
Map1 -> Reduce1 -> Reduce2
Reduce1,Map2和Reduce2具有相同的输入和输出类型。
谢谢!
答案 0 :(得分:0)
根据我的理解,我可以告诉你这些要点(如果我错了,可能会帮助你,也可能不会帮助你纠正我):
1)地图1->减少1->直接映射到mapper2:用于优化的是火花集群计算框架(使用内存计算,避免对hdfs进行不必要的读/写)。
2)如果你想要像reducer1 - > reducer2这样的东西。你必须考虑如何在一个reducer本身中编写逻辑,但问题在于它全部取决于你的要求我指的是你想要执行哪些键的聚合(更详细地说:reducer1接收同一组键,on只有你可以完成下一次聚合的任务。)
3)在Hadoop中,协议只是这样的:map - >然后聚合,如果有任何下一个聚合,它必须来自Userdefinedmapper / IdentityMapper。
希望这有助于:)