spark 数据倾斜之两阶段聚合(局部聚合+全局聚合)
两阶段聚合(局部聚合+全局聚合)
方案适用场景:
对RDD执行reduceByKey等聚合类shuffle算子或者在Spark SQL中使用group
by语句进行分组聚合时,比较适用这种方案。
方案实现思路:
这个方案的核心实现思路就是进行两阶段聚合。第一次是局部聚合,先给每个key都打上一个随机数,比如10以内的随机数,此时原先一样的key就变成不一样的了,比如(hello,
- (hello, 1) (hello, 1) (hello, 1),就会变成(1_hello, 1) (1_hello, 1)(2_hello, 1) (2_hello,1)。接着对打上随机数后的数据,执行reduceByKey 等聚合操作,进行局部聚合,那么局部聚合结果,就会变成了(1_hello, 2) (2_hello,2)。然后将各个key的前缀给去掉,就会变成(hello,2)(hello,2),再次进行全局聚合操作,就可以得到最终结果了,比如(hello, 4)。
方案实现原理:
将原本相同的key通过附加随机前缀的方式,变成多个不同的key,就可以让原本被一个task处理的数据分散到多个task上去做局部聚合,进而解决单个task处理数据量过多的问题。接着去除掉随机前缀,再次进行全局聚合,就可以得到最终的结果。具体原理见下图。
方案优点:
对于聚合类的shuffle操作导致的数据倾斜,效果是非常不错的。通常都可以解决掉数据倾斜,或者至少是大幅度缓解数据倾斜,将Spark作业的性能提升数倍以上。
方案缺点:
仅仅适用于聚合类的shuffle操作,适用范围相对较窄。如果是join类的shuffle操作,还得用其他的解决方案。
原文链接
Spark性能优化指南——高级篇 - 美团技术团队
spark 数据倾斜之两阶段聚合(局部聚合+全局聚合)相关推荐
- Spark数据倾斜的完美解决
数据倾斜解决方案 数据倾斜的解决,跟之前讲解的性能调优,有一点异曲同工之妙. 性能调优中最有效最直接最简单的方式就是加资源加并行度,并注意RDD架构(复用同一个RDD,加上cache缓存).相对于前面 ...
- Spark数据倾斜优化
Spark数据倾斜 就是数据分到各个区的数量不太均匀,可以自定义分区器,想怎么分就怎么分. Spark中的数据倾斜问题主要指shuffle过程中出现的数据倾斜问题,是由于不同的key对应的数据量不同导 ...
- Spark数据倾斜解决方案(转)
本文转发自技术世界,原文链接 http://www.jasongj.com/spark/skew/ Spark性能优化之道--解决Spark数据倾斜(Data Skew)的N种姿势 发表于 2017 ...
- 解决Spark数据倾斜(Data Skew)的 N 种姿势 与 问题定位
Spark性能优化之道--解决Spark数据倾斜(Data Skew)的N种姿势 本文结合实例详细阐明了Spark数据倾斜的问题定位和几种场景以及对应的解决方案,包括避免数据源倾斜,调整并行度,使用自 ...
- Spark 数据倾斜介绍_大数据培训
Spark 数据倾斜 Spark中的数据倾斜问题主要指shuffle过程中出现的数据倾斜问题,是由于不同的key对应的数据量不同导致的不同task所处理的数据量不同的问题. 例如,reduce点一共要 ...
- Spark - 数据倾斜实战之 skewness 偏度与 kurtosis 峰度 By ChatGPT4
目录 一.引言 二.峰度 Skewness 简介 三.峰度 kurtosis 简介 四.Skewness 偏度与 kurtosis 峰度实现 1.Spark 实现 2.自定义实现 五.偏度.峰度绘图 ...
- spark+数据倾斜+解决方案
spark+数据倾斜+解决方案 1.如何判断数据切斜的发生源头? 根据stage划分原理和sparkUI 2.数据倾斜解决方案 解决方案一:使用Hive ETL预处理数据
- 数据包络分析--两阶段加性网络DEA--使用优化黄金分割比例算法(第一篇)
数据包络分析-两阶段加性网络-使用黄金分割比例算法 文献介绍 乘子模型 基础信息 黄金分割比例算法 例子 文献介绍 如果阅读过我前面的文章<数据包络分析-加性网络DEA分解>,那么这篇文章 ...
- hive解决数据倾斜问题_八种解决 Spark 数据倾斜的方法
有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能. 数 ...
最新文章
- php sftp 删除,Linux中安装,卸载ftp|sftp服务
- Js中清空文件上传字段(input type=file )
- 项目中对网内IT资产进行管理
- simscape multibody仿真报错装配位置_大型结构件虚拟装配仿真软件,三维数字化分析,现场直接调整...
- 驰骋工作流程引擎在流程设计发生变化后如何处理?
- 编译原理文法等价变换
- 【电路仿真】基于matlab Simulink光伏太阳能电池板仿真模型【含Matlab源码 771期】
- win10 开始屏幕 磁铁程序图标不显示 解决
- 建立矩阵 reshape函数,pascal函数,magic函数,diag函数【Matlab】
- C语言 输出正三角形图形
- STM8开发环境搭建(STVD + COSMIC)
- 东芝2303am维护清零_东芝打印机2303A怎样清零?
- FPGA之JESD204B接口——总体概要 首片
- 优秀的管理者如何带好团队(这几个技巧你是否学会)
- no identity-based policy allows the cloudformation:CreateStack action
- 钉钉企业邮箱smtp服务器
- DDoS攻击--防护本质
- PBFT(拜占庭容错)
- 【Java】JUC(java.util.concurrent)工具包中的并发相关
- 树莓派4B连接KY008激光头
热门文章
- linux on android 项目,好累,终于完成了 Android-on-Yeeloong 项目的搭建
- svm分类代码_SVM的原理及实现垃圾邮件分类代码解析:
- 数据结构python语言描述课后答案_《数据结构与算法Python语言描述》习题第二章第三题(python版)...
- 计算机round是什么函数,round函数
- vim 安装_vim实战:插件安装(Vundle,NerdTree)
- spark 读取ftp_scala – 使用ftp在Apache Spark中的远程计算机上读取文件
- pandas rolling方法_Pandas处理时间序列数据的20个关键知识点
- bat 复制文件夹_新建366个文件夹,你用了2小时,我使用excel与bat命令1分钟搞定...
- datatable的数据进行组内排序_Spark实现分组Top-k排序的四种方案(scala语言)
- mysql8 create table 语法错误_MySQL8.0 Window Function 剖析