Hadoop2.2链mapreduce作业map->reducer->map->reducer

xmjla07d  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(368)

我有两个mapreduce作业,第一个reducer的输出是第二个mapper的输入:

Map1 -> Reduce1 -> Map2 -> Reduce2

现在呢 Map2 读取由输出的文件 Reduce1 . 所以呢 Map1 -> Reduce1 以及 Map2 -> Reduce2 是独立的。
它可以工作,但是如果reduce1的输出直接是map2的输入,那么它会更容易,而且我认为会更优化。
有办法吗?在这种情况下 Map2 只是一个身份Map器,所以如果我能:

Map1 -> Reduce1 -> Reduce2

reduce1、map2和reduce2具有相同的输入和输出类型。
谢谢!

gz5pxeao

gz5pxeao1#

根据我的理解,我可以告诉你以下几点(可能对你有帮助,也可能没有帮助,如果我错了请纠正我):
1) map1->reduce1->直接Map到mapper2:因为优化是在spark集群计算框架中解决的(使用内存计算,避免对hdfs不必要的读/写)。
2) 如果你想要像reducer1->reducer2这样的东西。您必须考虑如何在一个reducer中编写逻辑,但这里的问题是,它完全取决于您的需求我指的是要执行的键的聚合(更详细地说:reducer1接收相同的键集,只有u可以执行下一个聚合的任务)。
3) 在hadoop中,协议是这样的:Map-->然后聚合,如果有下一个聚合,它必须来自userdefinedmapper/identitymapper。
希望这有帮助:)

相关问题