两阶段聚合(局部聚合+全局聚合)

方案适用场景:

对RDD执行reduceByKey等聚合类shuffle算子或者在Spark SQL中使用group
by语句进行分组聚合时,比较适用这种方案。

方案实现思路:

这个方案的核心实现思路就是进行两阶段聚合。第一次是局部聚合,先给每个key都打上一个随机数,比如10以内的随机数,此时原先一样的key就变成不一样的了,比如(hello,

  1. (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 数据倾斜之两阶段聚合(局部聚合+全局聚合)相关推荐

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

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

  2. Spark数据倾斜优化

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

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

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

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

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

  5. Spark 数据倾斜介绍_大数据培训

    Spark 数据倾斜 Spark中的数据倾斜问题主要指shuffle过程中出现的数据倾斜问题,是由于不同的key对应的数据量不同导致的不同task所处理的数据量不同的问题. 例如,reduce点一共要 ...

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

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

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

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

  8. 数据包络分析--两阶段加性网络DEA--使用优化黄金分割比例算法(第一篇)

    数据包络分析-两阶段加性网络-使用黄金分割比例算法 文献介绍 乘子模型 基础信息 黄金分割比例算法 例子 文献介绍 如果阅读过我前面的文章<数据包络分析-加性网络DEA分解>,那么这篇文章 ...

  9. hive解决数据倾斜问题_八种解决 Spark 数据倾斜的方法

    有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能. 数 ...

最新文章

  1. php sftp 删除,Linux中安装,卸载ftp|sftp服务
  2. Js中清空文件上传字段(input type=file )
  3. 项目中对网内IT资产进行管理
  4. simscape multibody仿真报错装配位置_大型结构件虚拟装配仿真软件,三维数字化分析,现场直接调整...
  5. 驰骋工作流程引擎在流程设计发生变化后如何处理?
  6. 编译原理文法等价变换
  7. 【电路仿真】基于matlab Simulink光伏太阳能电池板仿真模型【含Matlab源码 771期】
  8. win10 开始屏幕 磁铁程序图标不显示 解决
  9. 建立矩阵 reshape函数,pascal函数,magic函数,diag函数【Matlab】
  10. C语言 输出正三角形图形
  11. STM8开发环境搭建(STVD + COSMIC)
  12. 东芝2303am维护清零_东芝打印机2303A怎样清零?
  13. FPGA之JESD204B接口——总体概要 首片
  14. 优秀的管理者如何带好团队(这几个技巧你是否学会)
  15. no identity-based policy allows the cloudformation:CreateStack action
  16. 钉钉企业邮箱smtp服务器
  17. DDoS攻击--防护本质
  18. PBFT(拜占庭容错)
  19. 【Java】JUC(java.util.concurrent)工具包中的并发相关
  20. 树莓派4B连接KY008激光头

热门文章

  1. linux on android 项目,好累,终于完成了 Android-on-Yeeloong 项目的搭建
  2. svm分类代码_SVM的原理及实现垃圾邮件分类代码解析:
  3. 数据结构python语言描述课后答案_《数据结构与算法Python语言描述》习题第二章第三题(python版)...
  4. 计算机round是什么函数,round函数
  5. vim 安装_vim实战:插件安装(Vundle,NerdTree)
  6. spark 读取ftp_scala – 使用ftp在Apache Spark中的远程计算机上读取文件
  7. pandas rolling方法_Pandas处理时间序列数据的20个关键知识点
  8. bat 复制文件夹_新建366个文件夹,你用了2小时,我使用excel与bat命令1分钟搞定...
  9. datatable的数据进行组内排序_Spark实现分组Top-k排序的四种方案(scala语言)
  10. mysql8 create table 语法错误_MySQL8.0 Window Function 剖析