spark-shuffle

shuffle 操作

Spark中的某些算子会触发一个名为shuffle的时间。Shuffle是spark一种重新分配数据的机制,便于不同分区之间进行分组。Shuffle都会涉及数据的序列化、磁盘IO 和 网络IO,使得Shuffle成为一种复杂而昂贵的操作。


背景

为理解Shuffle过程中发生什么,举个reduceByKey的例子。reduceByKey操作生产一个新的RDD,组成一个键值对,对键值执行reduce函数,单个键对应的值往往不在同一个分区,甚至是跨节点的,但它们必须位于同一个分区才能计算出结果。

Spark中,在某些特定的操作中数据通常不会跨分区分布。在计算过程中,单个task将在单个partition中进行计算,在单个reduce task 中,需要在所有partition的组织数据,spark需要对所有partition进行操作,从中找到所有键对应的值,然后将所有partition的的值进行汇总,这个过程称为Shuffle。


Narrow(窄依赖)

一个父RDD的partition至多被子RDD的某个partition使用一次

Wide(宽依赖)

一个父RDD的partition会被子RDD的某个partition使用多次。




猜你喜欢

转载自blog.csdn.net/qq_26369213/article/details/79967730