Spark的coalesce方法,性能的提升

时间:2022-04-25 02:33:30
对于filter后,数据量大大减少的情况,使用该方法后,对性能有多大多大提升?

6 个解决方案

#1


向大家请教一下 Spark的coalesce方法,性能的提升

#2


做重新分区就要观察之前的分区数是否合理。一般是所有executor*核心数的整数倍
如果reparation/coalesce后性能巨幅提升,那意味着reparation之前的RDD有数据倾斜。

#3


引用 2 楼 link0007 的回复:
做重新分区就要观察之前的分区数是否合理。一般是所有executor*核心数的整数倍
如果reparation/coalesce后性能巨幅提升,那意味着reparation之前的RDD有数据倾斜。

要是有数据倾斜的话,也只是把数据倾斜的数据分成了几分,依然会有倾斜的出现吧

#4


引用 3 楼 weixin_35101855 的回复:
Quote: 引用 2 楼 link0007 的回复:

做重新分区就要观察之前的分区数是否合理。一般是所有executor*核心数的整数倍
如果reparation/coalesce后性能巨幅提升,那意味着reparation之前的RDD有数据倾斜。

要是有数据倾斜的话,也只是把数据倾斜的数据分成了几分,依然会有倾斜的出现吧

不一定。例如你是从HBase读取的数据,一个Region的数据在RDD里就是一个Partition。这种情况直接执行分析逻辑,很大概率会数据倾斜。但如果通过reparation,Spark会采用RangePartitioner对数据通过水塘抽样算法进行采样,根据采样的数据分布情况,分配每个分区的数值范围,从而重新分区。因此一般情况下,重新分区比原来分区数要大的时候,每个分区的数据量都会比较平均。

#5


嗯哦这个水塘抽烟算法怎么分的啊?hash还是?

#6


引用 5 楼 weixin_35101855 的回复:
嗯哦这个水塘抽烟算法怎么分的啊?hash还是?

参考RangePartitioner和SamplingUtils.reservoirSampleAndCount源码。
水塘抽样原理参考:
https://www.iteblog.com/archives/1525

#1


向大家请教一下 Spark的coalesce方法,性能的提升

#2


做重新分区就要观察之前的分区数是否合理。一般是所有executor*核心数的整数倍
如果reparation/coalesce后性能巨幅提升,那意味着reparation之前的RDD有数据倾斜。

#3


引用 2 楼 link0007 的回复:
做重新分区就要观察之前的分区数是否合理。一般是所有executor*核心数的整数倍
如果reparation/coalesce后性能巨幅提升,那意味着reparation之前的RDD有数据倾斜。

要是有数据倾斜的话,也只是把数据倾斜的数据分成了几分,依然会有倾斜的出现吧

#4


引用 3 楼 weixin_35101855 的回复:
Quote: 引用 2 楼 link0007 的回复:

做重新分区就要观察之前的分区数是否合理。一般是所有executor*核心数的整数倍
如果reparation/coalesce后性能巨幅提升,那意味着reparation之前的RDD有数据倾斜。

要是有数据倾斜的话,也只是把数据倾斜的数据分成了几分,依然会有倾斜的出现吧

不一定。例如你是从HBase读取的数据,一个Region的数据在RDD里就是一个Partition。这种情况直接执行分析逻辑,很大概率会数据倾斜。但如果通过reparation,Spark会采用RangePartitioner对数据通过水塘抽样算法进行采样,根据采样的数据分布情况,分配每个分区的数值范围,从而重新分区。因此一般情况下,重新分区比原来分区数要大的时候,每个分区的数据量都会比较平均。

#5


嗯哦这个水塘抽烟算法怎么分的啊?hash还是?

#6


引用 5 楼 weixin_35101855 的回复:
嗯哦这个水塘抽烟算法怎么分的啊?hash还是?

参考RangePartitioner和SamplingUtils.reservoirSampleAndCount源码。
水塘抽样原理参考:
https://www.iteblog.com/archives/1525