调整并行度分散同一个Task的不同Key

方案适用场景:

如果我们必须要对数据倾斜迎难而上,那么建议优先使用这种方案,因为这是处理数据倾斜最简单的一种方案。

方案实现思路:
在对RDD执行shuffle算子时,给shuffle算子传入一个参数,比如

reduceByKey(1000),该参数就设置了这个shuffle算子执行时shuffle redu task的数量。对于Spark SQL中的shuffle类语句,比如group
by、join等,需要设置一个参数,即spark.sql.shuffle.partitions,该参数代表了shuffle read task的并行度,该值默认是200,对于很多场景来说都有点过小。

方案实现原理:

增加shuffle read task的数量,可以让原本分配给一个task的多个key分配给多个task,从而让每个task处理比原来更少的数据。举例来说,如果原本有5个key,每个key对应10条数据,这5个key都是分配给一个task的,那么这个task就要处理50条数据。而增加了shuffle
read task以后,每个task就分配到一个key,即每个task就处理10条数据,那么自然每个task的执行时间都会变短了。具体原理如下图所示。

方案优点:

实现起来比较简单,可以有效缓解和减轻数据倾斜的影响。

方案缺点:

只是缓解了数据倾斜而已,没有彻底根除问题,根据实践经验来看,其效果有限。

方案实践经验:

该方案通常无法彻底解决数据倾斜,因为如果出现一些极端情况,比如某个key对应的数据量有100万,那么无论你的task数量增加到多少,这个对应着100万数据的key肯定还是会分配到一个task中去处理,因此注定还是会发生数据倾斜的。所以这种方案只能说是在发现数据倾斜时尝试使用的第一种手段,尝试去用最简单的方法缓解数据倾斜而已,或者是和其他方案结合起来使用。

原理

Spark在做Shuffle时,默认使用HashPartitioner(非Hash
Shuffle)对数据进行分区。如果并行度设置的不合适,可能造成大量不相同的Key对应的数据被分配到了同一个Task上,造成该Task所处理的数据远大于其它Task,从而造成数据倾斜。

如果调整Shuffle时的并行度,使得原本被分配到同一Task的不同Key发配到不同Task上处理,则可降低原Task所需处理的数据量,从而缓解数据倾斜问题造成的短板效应。

总结

适用场景

大量不同的Key被分配到了相同的Task造成该Task数据量过大。

解决方案
调整并行度。一般是增大并行度,但有时如本例减小并行度也可达到效果。
优势

实现简单,可在需要Shuffle的操作算子上直接设置并行度或者使用spark.default.parallelism设置。如果是SparkSQL,还可通过SET
spark.sql.shuffle.partitions=[num_tasks]设置并行度。可用最小的代价解决问题。一般如果出现数据倾斜,都可以通过这种方法先试验几次,如果问题未解决,再尝试其它方法。

劣势
适用场景少,只能将分配到同一Task的不同Key分散开,但对于同一Key倾斜严重的情况该方法并不适用。并且该方法一般只能缓解数据倾斜,没有彻底消除问题。从实践经验来看,其效果一般

spark数据倾斜解决之提高并行度相关推荐

  1. Spark数据倾斜解决

    一.数据倾斜表现 数据倾斜就是数据分到各个区的数量不太均匀,可以自定义分区器,想怎么分就怎么分. Spark中的数据倾斜问题主要指shuffle过程中出现的数据倾斜问题,是由于不同的key对应的数据量 ...

  2. Spark数据倾斜的完美解决

    数据倾斜解决方案 数据倾斜的解决,跟之前讲解的性能调优,有一点异曲同工之妙. 性能调优中最有效最直接最简单的方式就是加资源加并行度,并注意RDD架构(复用同一个RDD,加上cache缓存).相对于前面 ...

  3. 解决Spark数据倾斜(Data Skew)的 N 种姿势 与 问题定位

    Spark性能优化之道--解决Spark数据倾斜(Data Skew)的N种姿势 本文结合实例详细阐明了Spark数据倾斜的问题定位和几种场景以及对应的解决方案,包括避免数据源倾斜,调整并行度,使用自 ...

  4. Spark数据倾斜优化

    Spark数据倾斜 就是数据分到各个区的数量不太均匀,可以自定义分区器,想怎么分就怎么分. Spark中的数据倾斜问题主要指shuffle过程中出现的数据倾斜问题,是由于不同的key对应的数据量不同导 ...

  5. Spark数据倾斜解决方案(收藏级)

    一.数据倾斜表现 数据倾斜就是数据分到各个区的数量不太均匀,可以自定义分区器,想怎么分就怎么分. Spark中的数据倾斜问题主要指shuffle过程中出现的数据倾斜问题,是由于不同的key对应的数据量 ...

  6. Spark数据倾斜解决方案(转)

    本文转发自技术世界,原文链接 http://www.jasongj.com/spark/skew/ Spark性能优化之道--解决Spark数据倾斜(Data Skew)的N种姿势  发表于 2017 ...

  7. sqoop-import 并行抽数及数据倾斜解决

    最近在数据中台的数据抽数优化工作,由于单表数据量太大(每天千万级别)导致sqoop抽数使用单实例报内存溢出以及抽数时间过长,决定采用sqoop的多实例并行抽数,参考了一些文档,但同时遇到了一些问题,趁 ...

  8. Spark - 数据倾斜实战之 skewness 偏度与 kurtosis 峰度 By ChatGPT4

    目录 一.引言 二.峰度 Skewness 简介 三.峰度 kurtosis 简介 四.Skewness 偏度与 kurtosis 峰度实现 1.Spark 实现 2.自定义实现 五.偏度.峰度绘图 ...

  9. spark+数据倾斜+解决方案

    spark+数据倾斜+解决方案 1.如何判断数据切斜的发生源头? 根据stage划分原理和sparkUI 2.数据倾斜解决方案 解决方案一:使用Hive ETL预处理数据

最新文章

  1. SVN:服务器资源删掉,本地添加时和删掉的名字同名出现One or more files are in a conflicted state....
  2. C# 操作Cookie类
  3. python yaml配置文件_python读取yaml配置文件
  4. Android学习笔记18:自定义Seekbar拖动条式样
  5. 【Linux - mysql】linux下mysql报Failed to restart mysqld.service: Unit not found
  6. U盘安装Linux挂载cd,U盘安装Ubuntu Server CD-ROM挂载失败
  7. linux 未找到wifi适配器,无线 - 重新启动后找不到WI-FI适配器
  8. JEECG-P3首个开源插件诞生!CMS网站插件 Jeecg-p3-biz-cms1.0版本发布!
  9. Postgre 中的空值判断
  10. 灵云语音识别(ASR)实现实时识别
  11. 有没有好的公文写作范文素材,求助各位网友?
  12. plt.plot()有无分号结果不同
  13. 搭建远程仓库(源)来托管 Sencha 包(Package)
  14. MySQL(八):InnoDB 日志缓冲区(Log Buffer)
  15. 【Jenkins】Jenkins容器构建脚本以及容器瘦身docker-slim使用
  16. Socket/Tcp游戏通信(一)-IP和端口号
  17. MNN推理引擎框架简介
  18. ArcGis乱码问题集汇总
  19. 摄氏度与华氏度的转换
  20. 武汉高性能计算大会2022举办,高性能计算生态发展再添新动力

热门文章

  1. ios 配置java环境变量_Ios 入门 ----基本的控件
  2. rocketmq python消息堆积_编写shell脚本监控rocketMQ消息堆积并推送钉钉
  3. matlab如何判断两个矩阵的元素是否相同_蚁群算法及其MATLAB实现
  4. ad软件中的插座_STM32采集AD的输入阻抗问题(转)
  5. IDEA 插件 Material Theme UI收费后 免费的办法
  6. 动态分区分配存储管理方式的内存分配回收
  7. html图片等比例拉伸,CSS控制图片等比例缩放
  8. qtreewidgetitem 选中背景颜色_列表式报表阶梯背景色效果
  9. sklearn中的xgboost_XGBoost的介绍、应用、调参、知识点
  10. mysql 宽字符注入_5. 宽字符注入详解与实战