今天就跟大家聊聊有关大数据中Spark数据倾斜表现及解决方案是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
数据倾斜描述
Spark数据倾斜表现
数据倾斜产生的原因是:shuffle的时候,需要将各个节点的相同的key拉取到同一个节点上,如果这个key对应的数据量非常大的时候,就会发生数据倾斜。
数据倾斜只会发生在shuffle过程中,Spark引擎会触发Shuffle的RDD算子有:distinct、repartition、reduceByKey、groupByKey、aggregateByKey、join
常见解决方案
调整并行度
需要Shuffle的操作算子上直接设置并行度或者使用spark.default.parallelism设置。如果是Spark SQL,还可通过SET spark.sql.shuffle.partitions=num_tasks设置并行度。
该方法使用场景少,只能缓解数据倾斜,不能彻底解决数据倾斜。
Map side join
通过Spark的Broadcast机制,将Reduce Join转化为Map Join,避免Shuffle,从而完全消除Shuffle带来的数据倾斜。
参与Join的一侧数据集足够小,并且主要适用于Join的场景,不适合聚合的场景,适用条件有限。
异常值过滤
通过Spark的reduceByKey,统计每一个key的数量,超过指定数量的key或者数量top的key,作为异常key。当然也可以使用Sample对RDD进行抽样后,进行key的统计。
该方法的特点是:简单、粗暴,有一定的适用场景。
key值转换:加随机数
这个可以理解为大招
实际场景中可能需要上述方案的组合操作,比如:异常值过滤 + key值转换:加随机数,可以进行性能的优化:根据异常值,对RDD进行拆分:分别拆分成两个RDD,对于没有数据倾斜的,正常操作。对于有数据倾斜的加上随机前缀,再进行Shuffle操作。
看完上述内容,你们对大数据中Spark数据倾斜表现及解决方案是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注天达云行业资讯频道,感谢大家的支持。