大数据开发:剖析Hadoop和Spark的Shuffle过程差异
那么Shuffle Read发送的机缘是什么?是要等全部ShuffleMapTask执行完,再去fetch数据吗?理论上,只要有一个 ShuffleMapTask执行完,就可以开始fetch数据了,现实上,spark必需比及父stage执行完,才气执行子stage,以是,必需比及全部 ShuffleMapTask执行完毕,才去fetch数据。fetch过来的数据,先存入一个Buffer缓冲区,以是这里一次性fetch的FileSegment不能太大,虽然假如fetch过来的数据大于每一个阀值,也是会spill到磁盘的。 fetch的进程过来一个buffer的数据,就可以开始聚合了,这里就碰着一个题目,每次fetch部门数据,怎么能实现全局聚合呢?以word count的reduceByKey(《Spark RDD操纵之ReduceByKey 》)为例,假设单词hello有十个,可是一次fetch只拉取了2个,那么怎么全局聚合呢?Spark的做法是用HashMap,聚合操纵现实上是map.put(key,map.get(key)+1),将map中的聚合过的数据get出来相加,然后put归去,比及全部数据fetch完,也就完成了全局聚合。
Hadoop的MapReduce Shuffle和Spark Shuffle不同总结如下:
【编辑保举】
点赞 0 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |