首页 理论教育 Shuffle依赖优化技巧

Shuffle依赖优化技巧

时间:2023-06-21 理论教育 版权反馈
【摘要】:Shuffle依赖一般被应用在作业调度过程中阶段的划分,在第7章会讲解这一过程。Shuffle依赖的对应实现为ShuffleDependency类,其代码如下。ShuffleDependency类中几个成员的作用如下。1)rdd:用于表示Shuffle依赖中,子RDD所依赖的父RDD。2)shuffleId:Shuffle编号,用于在Spark应用程序中唯一标识一个Shuffle依赖。3)shuffleHandle:Shuffle句柄,在Shuffle过程中,被用于传递Shuffle相关信息给各个并行任务。这些函数被用于Shuffle过程中数据的聚合,第7章将会介绍其作用。8)mapSideCombine:用于指定Shuffle过程中是否需要在map端进行combine操作。

Shuffle依赖优化技巧

Shuffle依赖一般被应用在作业调度过程中阶段的划分,在第7章会讲解这一过程。Shuffle依赖的对应实现为ShuffleDependency类,其代码如下。

ShuffleDependency类中几个成员的作用如下。

1)rdd:用于表示Shuffle依赖中,子RDD所依赖的父RDD。

2)shuffleId:Shuffle编号,用于在Spark应用程序中唯一标识一个Shuffle依赖。

3)shuffleHandle:Shuffle句柄,在Shuffle过程中,被用于传递Shuffle相关信息给各个并行任务。

4)partitioner:分区器,用于决定Shuffle过程中reducer的个数(实际上是子RDD的分区个数)以及map端的一条数据记录应该分配给哪一个Reducer,也可以被用在CoGroupedRDD中,确定父RDD与子RDD之间的依赖关系类型。关于分区器的细节,我们会在6.5节中介绍。

5)serializer:序列化器,用于Shuffle map端数据的序列化和reduce端数据的反序列化。

6)KeyOrdering:键值排序策略,用于决定子RDD的一个分区内,如何根据键值对<K,V>类型数据记录进行排序。

7)Aggregator:聚合器,内部包含了多个聚合函数,比较重要的函数有createCombiner:V=>C,mergeValue:(C,V)=>C以及mergeCombiners:(C,C)=>C。例如,对于groupByKey操作,createCombiner表示把第一个元素放入到集合中,mergeValue表示一个元素添加到集合中,mergeCombiners表示把两个集合进行合并。这些函数被用于Shuffle过程中数据的聚合,第7章将会介绍其作用。

8)mapSideCombine:用于指定Shuffle过程中是否需要在map端进行combine操作。如果指定该值为true,由于combine操作需要用到聚合器中的相关聚合函数,因此Aggregator不能为空,否则Spark会抛出异常。例如在groupByKey转换操作对应的ShuffleDependency中,mapSideCombine=false,而在reduceByKey转换操作中,mapSideCombine=true。(www.xing528.com)

ShuffleDependency类中几个成员的作用如下。

1)rdd:用于表示Shuffle依赖中,子RDD所依赖的父RDD。

2)shuffleId:Shuffle编号,用于在Spark应用程序中唯一标识一个Shuffle依赖。

3)shuffleHandle:Shuffle句柄,在Shuffle过程中,被用于传递Shuffle相关信息给各个并行任务。

4)partitioner:分区器,用于决定Shuffle过程中reducer的个数(实际上是子RDD的分区个数)以及map端的一条数据记录应该分配给哪一个Reducer,也可以被用在CoGroupedRDD中,确定父RDD与子RDD之间的依赖关系类型。关于分区器的细节,我们会在6.5节中介绍。

5)serializer:序列化器,用于Shuffle map端数据的序列化和reduce端数据的反序列化。

6)KeyOrdering:键值排序策略,用于决定子RDD的一个分区内,如何根据键值对<K,V>类型数据记录进行排序。

7)Aggregator:聚合器,内部包含了多个聚合函数,比较重要的函数有createCombiner:V=>C,mergeValue:(C,V)=>C以及mergeCombiners:(C,C)=>C。例如,对于groupByKey操作,createCombiner表示把第一个元素放入到集合中,mergeValue表示一个元素添加到集合中,mergeCombiners表示把两个集合进行合并。这些函数被用于Shuffle过程中数据的聚合,第7章将会介绍其作用。

8)mapSideCombine:用于指定Shuffle过程中是否需要在map端进行combine操作。如果指定该值为true,由于combine操作需要用到聚合器中的相关聚合函数,因此Aggregator不能为空,否则Spark会抛出异常。例如在groupByKey转换操作对应的ShuffleDependency中,mapSideCombine=false,而在reduceByKey转换操作中,mapSideCombine=true。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈