在 reducer 上执行 Hadoop 组合器
Posted
技术标签:
【中文标题】在 reducer 上执行 Hadoop 组合器【英文标题】:Hadoop combiner execution on reducers 【发布时间】:2015-07-15 09:30:14 【问题描述】:我有一个长期运行的 MapReduce 作业,其中一些映射器比其他映射器花费更多的时间。
检查 Web 界面上的统计信息,我看到我的组合器也启动了减速器(其中大部分是空闲的,因为只有 2 个映射器仍在运行)。
虽然在所有映射器完成之前不要浪费时间并进行一些预聚合似乎是合理的,但我找不到任何有关此行为的文档。谁能确认这确实是 Hadoop 的一个功能,或者只是在 Web 界面上显示错误?
【问题讨论】:
【参考方案1】:组合器在映射器发出合理数量的数据时启动。请注意,组合器作为映射器输出的聚合(通常)运行(而不是在化简端)。更多详情请见here。
此外,reducer 可以在所有映射器完成之前开始(仅)收集映射器发出的数据。这被称为减速器的洗牌阶段。您可以通过更改mapred.reduce.slowstart.completed.maps
属性(或在较新版本中为mapreduce.job.reduce.slowstart.completedmaps
)来更改reducer 开始收集数据的时间。更多详情请关注this SO post。
【讨论】:
感谢您的回答!但是,我知道根据文档,组合器仅在映射器上运行。但是,我看到组合器输入/输出行中 Web ui 的两列(映射器和缩减器)上的计数器都增加了。因此混乱。 (此作业在具有 70 个 cr1.8xlarge(32 核)实例的 EMR (2.4.7) 上运行)。以上是关于在 reducer 上执行 Hadoop 组合器的主要内容,如果未能解决你的问题,请参考以下文章
当reduce任务较少时,Hadoop reduce变得更慢