什么时候在Hadoop中启动shuffle
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么时候在Hadoop中启动shuffle相关的知识,希望对你有一定的参考价值。
我有什么时候洗牌开始的问题。
假设我有2个映射器和1个减速器。每个映射器将生成输出map1和map2。此map1和map2存储在相应datanode的临时磁盘中。
现在reducer应该等待map1和map2的输出?换句话说什么时候洗牌开始了?一旦map1完成或者它还必须等待map2完成?
我正在收听减速机上的流量,我无法找到任何流量,但控制台输出显示已经完成了70%(大约)的减少。
14/12/18 17:45:55 INFO mapred.JobClient: map 97% reduce 22%
14/12/18 17:45:58 INFO mapred.JobClient: map 98% reduce 22%
14/12/18 17:45:59 INFO mapred.JobClient: map 99% reduce 22%
14/12/18 17:46:07 INFO mapred.JobClient: map 100% reduce 22%
14/12/18 17:46:12 INFO mapred.JobClient: map 100% reduce 67%
14/12/18 17:46:15 INFO mapred.JobClient: map 100% reduce 71%
在这一点之后,我看到了混乱的交通流量。
我在这里有点困惑。这约70%的减速机工作是什么? !
谢谢
在你的减速机中...首先33%是复制阶段,然后接下来33%是洗牌和排序阶段,然后最终33%是你的实际减少操作。
我将尝试解释一个简单的流程:在完成map任务之后,将复制map任务的输出,其中假设会发生reduce任务。 Map和Reduce发生在同一台机器上不会发生..当一些映射器完成时,你会发现减少阶段有一些增量,甚至在完整的映射阶段发生之前。它是那些正在复制的已完成的map任务输出的数据。现在可以复制已完成的地图任务,其中必须发生减少任务。仅在完整地图阶段结束后才开始改组。这是因为,输出键将被排序..并且您不能排序直到有完整的键空间..权利.. ??
实际上,在地图和缩小边都会发生排序。在Definitive guide中清楚地解释了这一点
Shuffle和Sort阶段一起称为“复制”阶段。排序在RAM中完成。如果由于内存不足而需要外部排序,则会发生合并排序。所以我们编写排序/合并。
实际上,每个Map任务都有3个阶段:Map,Partitioning,Sort / Merge。每个Reduce任务都有3个阶段:Shuffle,Sort / Merge,Reduce。
在Hadoop中,当生成5%的所有地图任务输出时,随机阶段开始。在此策略中,虽然洗牌阶段较早开始以缓解作业执行时间,但它会导致重复合并以及减少端的更多磁盘访问,这再次导致作业执行时间延长。
以上是关于什么时候在Hadoop中启动shuffle的主要内容,如果未能解决你的问题,请参考以下文章
hadoop-MapReduce框架原理之Shuffle机制
Hadoop从入门到精通33:MapReduce核心原理之Shuffle过程分析