什么时候减少任务从Hadoop开始?

Sla*_*yer 80 reduce hadoop mapreduce

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

Don*_*ner 202

reduce阶段有3个步骤:shuffle,sort,reduce.Shuffle是每个映射器的reducer收集数据的地方.当映射器生成数据时会发生这种情况,因为它只是数据传输.另一方面,只有在完成所有映射器后才能启动sort和reduce.你可以通过查看减速器完成百分比来判断MapReduce正在做什么:0-33%意味着它正在进行洗牌,34-66%是排序,67%-100%是减少.这就是为什么你的减速器有时看起来"卡住"33% - 它正在等待地图制作者完成.

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

为什么早期开始减速机是一件好事?因为它会随着时间的推移将数据传输从映射器传播到Reducer,如果您的网络是瓶颈,这是一件好事.

为什么早期开始减速机是一件坏事?因为他们"hog up"减少了插槽,同时只复制数据并等待映射器完成.之后开始实际使用reduce槽的另一个作业现在无法使用它们.

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

通常,如果系统一次运行多个作业,我希望保持mapred.reduce.slowstart.completed.maps在上面0.9.这样,当工作除了复制数据之外什么都不做时,工作不会占用减速器.如果您一次只能运行一个工作,那么这样做0.1可能是合适的.

  • 很好的答案@Donald Miner.只想在较新的Hadoop版本中添加(我使用的是1.1.2),该值默认为0.05.http://hadoop.apache.org/docs/r1.1.2/mapred-default.html (5认同)
  • 你知道我在哪里可以阅读你提到的更多内容吗? (3认同)
  • @nishm我认为你混淆整个减少阶段的术语与减少减少阶段的内部.reduce阶段是shuffle,sort和reduce.Slowstart告诉它何时开始整个阶段.你是对的,减少阶段内部的减少仅在映射器完成时开始. (3认同)

jav*_*evg 5

reduce 阶段可以在调用 reducer 之前很久就开始。一旦“a”映射器完成工作,生成的数据就会经历一些排序和混洗(包括调用组合器和分区器)。减速器“阶段”在映射器数据处理开始的那一刻开始。完成这些处理后,您将看到减速器百分比的进展。但是,还没有调用任何减速器。根据可用/使用的处理器数量、数据的性质和预期的减速器数量,您可能需要更改上面@Donald-miner 所述的参数。