MapReduce要求所有映射器在组合阶段之前完成

时间:2012-03-26 07:31:06

标签: hadoop mapreduce combiners

我最近不得不在将结果传递到组合阶段之前运行需要所有映射器完成的作业(由于处理文件的结构方式)。通过配置以下内容, reducer 可以使用此功能 -

// force 100% of the mappers to conclude before reducers start
job.set("mapred.reduce.slowstart.completed.maps", "1.0");

我找不到任何类似的组合阶段配置。最后我把我的工作分成两部分,组合阶段充当减速器,我原来的减少传递给工作#2(mapper2简单地传递数据而不修改它)。

我在想 - 有没有办法在合并前错过配置100%地图完成?感谢。

1 个答案:

答案 0 :(得分:1)

没有办法控制这个 - 组合器可能会或可能不会为任何给定的地图实例运行,实际上组合器可能会在地图数据的各种溢出上运行多次。

汤姆怀特书中有一个更详细的定义:“Hadoop权威指南”:

http://books.google.com/books?id=Nff49D7vnJcC&pg=PA178&lpg=PA178&dq=hadoop+combiner+spill&source=bl&ots=IiesWqctTu&sig=V5b3Z2EVWp5JzIvc_Fzv1-AJerI&hl=en&sa=X&ei=QUJwT9XBCOna0QGOzpnlBg&ved=0CFMQ6AEwAw#v=onepage&q=hadoop%20combiner%20spill&f=false

所以你的合成器可能会在地图完成之前运行