shuffle原理概述:
哪些情况下,spark会发生shuffle?
spark中,以下几个算子会发生shuffle: groupByKey、reduceByKey、countByKey、join 等等
什么是shuffle?
groupByKey 就是把分散在集群上各个节点上的同一个key的数据,对应的values,集中到集群中同一个节点上。更准确的说,是集中到一个节点的一个executor的一个task中。集中了一个key的values后,才能继续做逻辑处理。
reduceByKey 对values集合进行reduce操作,最后变成一个value。
countByKey 在一个task中,获取一个key对应的所有values,然后进行计数。
举例reduceByKey(如下图):
同一个单词,比如(hello ,1),可能散落在不同的节点上;对单词计数累加时,就必须要让同一个单词在同一节点的一个task上,给一个task处理。
shuffle的前半部分stage的每个task,都会创建和下一个stage的task数量相同的文件。比如:下一个stage会有100个task,那么当前stage每一个task都会创建100份文件,