我最近不得不运行一项作业,该作业要求所有映射器在将结果传递到合并阶段之前完成(由于处理文件的结构方式)。减速器可通过配置以下内容使用此功能-
// force 100% of the mappers to conclude before reducers start
job.set("mapred.reduce.slowstart.completed.maps", "1.0");
我在联合收割机阶段找不到任何类似的配置。最终,我将我的作业分为两个部分,联合阶段充当reducer,我最初的reduce传递给作业#2(mapper2只传递数据,不修改数据)。
我想知道,有没有一种方法我错过了在合并前配置100%地图完成?谢谢
没有办法控制这一点-组合器可能为任何给定的地图实例运行,也可能不运行,事实上,组合器可能会在地图数据的各种溢出上运行多次。
Tom Whites的书中有一个更详细的定义:"Hadoop权威指南":
http://books.google.com/books?id=Nff49D7vnJcC&pg=PA178&lpg=PA178&dq=hadoop+组合器+溢出&source=bl&ots=IiesWqctTu&sig=V5b3Z2EVWp5JzIvc_Fzv1-AJerI&hl=en&sa=X&ei=QUJwT9XBCOna0QGzpnlBg&ved=0CFMQ6AEwAw#v=一页&q=hadoop%20组合器%20溢出&f=错误
因此,您的合并器可能会在地图完成之前运行