Hadoop 中的reduce 任务什么时候开始?

2023-12-14

Hadoop中reduce任务什么时候开始?它们是否在映射器完成一定百分比(阈值)后开始?如果是这样,这个阈值是固定的吗?通常使用什么样的阈值?


reduce阶段有3个步骤:shuffle、sort、reduce。 Shuffle 是减速器从每个映射器收集数据的地方。这可能在映射器生成数据时发生,因为它只是数据传输。另一方面,排序和归约只有在所有映射器完成后才能开始。你可以通过查看reducer完成百分比来判断哪一个MapReduce正在做:0-33%表示正在做shuffle,34-66%表示正在做sort,67%-100%表示正在做reduce。这就是为什么你的减速器有时会看起来“卡在”33%——它正在等待映射器完成。

减速器根据已完成的映射器百分比阈值开始洗牌。您可以更改参数以使减速器迟早启动。

为什么尽早启动减速机是一件好事?因为它随着时间的推移将数据传输从映射器分散到减速器,如果您的网络是瓶颈,这是一件好事。

为什么过早启动减速器是一件坏事?因为它们“占用”减少槽,同时仅复制数据并等待映射器完成。稍后启动的另一个作业将实际使用reduce slot,但现在无法使用它们。

您可以通过更改默认值来自定义减速器的启动时间mapred.reduce.slowstart.completed.maps in mapred-site.xml。值为1.00将等待所有映射器完成后再启动减速器。值为0.0将立即启动减速机。值为0.5当一半的映射器完成时将启动减速器。您还可以更改mapred.reduce.slowstart.completed.maps在逐个工作的基础上。在新版本的 Hadoop(至少 2.4.1)中,调用的参数是mapreduce.job.reduce.slowstart.completedmaps(感谢用户 yegor256)。

通常情况下,我喜欢保留mapred.reduce.slowstart.completed.maps above 0.9如果系统同时运行多个作业。这样,当减速器除了复制数据之外什么都不做时,作业就不会占用它们。如果您一次只运行一项作业,那么0.1可能是合适的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hadoop 中的reduce 任务什么时候开始? 的相关文章

随机推荐