1

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

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

我找不到组合阶段的任何类似配置。最终,我将我的工作分成了 2 个部分,组合阶段充当减速器,而我原来的 reduce 传递给了工作 #2(mapper2 只是传递数据而无需修改它)。

我想知道 - 有没有一种我错过了在合并之前配置 100% 地图完成的方法?谢谢。

4

1 回答 1

1

无法控制这一点 - 组合器可能会或可能不会针对任何给定的地图实例运行,实际上组合器可能会在地图数据的各种溢出中运行多次。

Tom Whites 书中有一个更详细的定义:“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=假

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

于 2012-03-26T10:19:37.953 回答