spark数据倾斜解决之提高并行度
调整并行度分散同一个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数据倾斜解决之提高并行度相关推荐
- Spark数据倾斜解决
一.数据倾斜表现 数据倾斜就是数据分到各个区的数量不太均匀,可以自定义分区器,想怎么分就怎么分. Spark中的数据倾斜问题主要指shuffle过程中出现的数据倾斜问题,是由于不同的key对应的数据量 ...
- Spark数据倾斜的完美解决
数据倾斜解决方案 数据倾斜的解决,跟之前讲解的性能调优,有一点异曲同工之妙. 性能调优中最有效最直接最简单的方式就是加资源加并行度,并注意RDD架构(复用同一个RDD,加上cache缓存).相对于前面 ...
- 解决Spark数据倾斜(Data Skew)的 N 种姿势 与 问题定位
Spark性能优化之道--解决Spark数据倾斜(Data Skew)的N种姿势 本文结合实例详细阐明了Spark数据倾斜的问题定位和几种场景以及对应的解决方案,包括避免数据源倾斜,调整并行度,使用自 ...
- Spark数据倾斜优化
Spark数据倾斜 就是数据分到各个区的数量不太均匀,可以自定义分区器,想怎么分就怎么分. Spark中的数据倾斜问题主要指shuffle过程中出现的数据倾斜问题,是由于不同的key对应的数据量不同导 ...
- Spark数据倾斜解决方案(收藏级)
一.数据倾斜表现 数据倾斜就是数据分到各个区的数量不太均匀,可以自定义分区器,想怎么分就怎么分. Spark中的数据倾斜问题主要指shuffle过程中出现的数据倾斜问题,是由于不同的key对应的数据量 ...
- Spark数据倾斜解决方案(转)
本文转发自技术世界,原文链接 http://www.jasongj.com/spark/skew/ Spark性能优化之道--解决Spark数据倾斜(Data Skew)的N种姿势 发表于 2017 ...
- sqoop-import 并行抽数及数据倾斜解决
最近在数据中台的数据抽数优化工作,由于单表数据量太大(每天千万级别)导致sqoop抽数使用单实例报内存溢出以及抽数时间过长,决定采用sqoop的多实例并行抽数,参考了一些文档,但同时遇到了一些问题,趁 ...
- Spark - 数据倾斜实战之 skewness 偏度与 kurtosis 峰度 By ChatGPT4
目录 一.引言 二.峰度 Skewness 简介 三.峰度 kurtosis 简介 四.Skewness 偏度与 kurtosis 峰度实现 1.Spark 实现 2.自定义实现 五.偏度.峰度绘图 ...
- spark+数据倾斜+解决方案
spark+数据倾斜+解决方案 1.如何判断数据切斜的发生源头? 根据stage划分原理和sparkUI 2.数据倾斜解决方案 解决方案一:使用Hive ETL预处理数据
最新文章
- SVN:服务器资源删掉,本地添加时和删掉的名字同名出现One or more files are in a conflicted state....
- C# 操作Cookie类
- python yaml配置文件_python读取yaml配置文件
- Android学习笔记18:自定义Seekbar拖动条式样
- 【Linux - mysql】linux下mysql报Failed to restart mysqld.service: Unit not found
- U盘安装Linux挂载cd,U盘安装Ubuntu Server CD-ROM挂载失败
- linux 未找到wifi适配器,无线 - 重新启动后找不到WI-FI适配器
- JEECG-P3首个开源插件诞生!CMS网站插件 Jeecg-p3-biz-cms1.0版本发布!
- Postgre 中的空值判断
- 灵云语音识别(ASR)实现实时识别
- 有没有好的公文写作范文素材,求助各位网友?
- plt.plot()有无分号结果不同
- 搭建远程仓库(源)来托管 Sencha 包(Package)
- MySQL(八):InnoDB 日志缓冲区(Log Buffer)
- 【Jenkins】Jenkins容器构建脚本以及容器瘦身docker-slim使用
- Socket/Tcp游戏通信(一)-IP和端口号
- MNN推理引擎框架简介
- ArcGis乱码问题集汇总
- 摄氏度与华氏度的转换
- 武汉高性能计算大会2022举办,高性能计算生态发展再添新动力
热门文章
- ios 配置java环境变量_Ios 入门 ----基本的控件
- rocketmq python消息堆积_编写shell脚本监控rocketMQ消息堆积并推送钉钉
- matlab如何判断两个矩阵的元素是否相同_蚁群算法及其MATLAB实现
- ad软件中的插座_STM32采集AD的输入阻抗问题(转)
- IDEA 插件 Material Theme UI收费后 免费的办法
- 动态分区分配存储管理方式的内存分配回收
- html图片等比例拉伸,CSS控制图片等比例缩放
- qtreewidgetitem 选中背景颜色_列表式报表阶梯背景色效果
- sklearn中的xgboost_XGBoost的介绍、应用、调参、知识点
- mysql 宽字符注入_5. 宽字符注入详解与实战