1.问题描述

  • 问题描述
上线一个SQL任务,发现其本身输入表都不打,基本都在百万级别以内,但是能够耗时几个小时,故进行优化

2.优化思路

2.1 并行度

根据运行指标发现,各个stage运行时间,应该是某个stage下的task发生倾斜
进一步跟踪stage,发现 task读写数据不是很大,只有几百KB,只要shuffle时才比较大
,因此判断并行度无益于作业优化
  • stage 362

2.2 shuffle ,聚合

shuflle

分析各个job的数据,发现也不是很大,无需改变shuffle时每个分区的数据处理大小【spark.sql.adaptive.shuffle.targetPostShuffleInputSize】
聚合
  • 数据膨胀
进一步查看耗时较久的stage,发现数据突然增大,由之前的百万级别突然增加到3亿多,貌似发现了问题所在,进一步分析对应的task集合,发现每个数据的
  • 数据join后发生膨胀
  • Task耗时,数据增加了大概190倍

2.3 优化思路

由此发现,数据进行shuffle发生数据膨胀【Expand】,查看spark的官网发现,spark- SQL对于数据的多维度聚合进行数据复制操作,对于不同聚合操作,复制多份全量数据,导致数据急剧增加,导致处理速度缓慢;因此有两种思路,第一种是从业务上出发,分拆聚合指标和分组维度后进行join,得到原来的指标;
第二种减少每个分区的处理数据,增加并行度,减少分区数据处理量,但会导致大量小文件,SQL任务运行完毕后需要进行小文件合并操作
  • 优化选择,减少分区数据处理量
spark.sql.files.maxPartitionBytes: The maximum number of bytes to pack into a single partition when reading files.
默认值为128MB,同hdfs.block.size ,可以进行减小值,进行调整
  • 调整后运行结果,运行在48min结束,基本保证业务使用

3 参考来源

  • https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-groupby.html
  • https://blog.csdn.net/weixin_32688333/article/details/112290306

Spark-SQL 多维度聚合优化相关推荐

  1. 字节跳动在 Spark SQL 上的核心优化实践

    作者 | 郭俊 封图 | BanburyTang 字节跳动数据仓库架构团队负责数据仓库领域架构设计,支持字节跳动几乎所有产品线(包含但不限于抖音.今日头条.西瓜视频.火山视频)数据仓库方向的需求,如 ...

  2. 字节跳动在Spark SQL上的核心优化实践

    字节跳动在Spark SQL上的核心优化实践 大数据架构 今天 以下文章来源于字节跳动技术团队 ,作者郭俊 字节跳动技术团队 字节跳动的技术实践分享 10月26日,字节跳动技术沙龙 | 大数据架构专场 ...

  3. 上海沙龙回顾 | ​字节跳动在Spark SQL上的核心优化实践

    10月26日,字节跳动技术沙龙 | 大数据架构专场 在上海字节跳动总部圆满结束.我们邀请到字节跳动数据仓库架构负责人郭俊,Kyligence 大数据研发工程师陶加涛,字节跳动存储工程师徐明敏,阿里云高 ...

  4. Spark SQL 在字节跳动的核心优化实践

    10月26日,字节跳动技术沙龙 | 大数据架构专场 在上海字节跳动总部圆满结束.我们邀请到字节跳动数据仓库架构负责人郭俊,Kyligence 大数据研发工程师陶加涛,字节跳动存储工程师徐明敏,阿里云高 ...

  5. Spark SQL运行流程及性能优化:RBO和CBO

    1 Spark SQL运行流程 1.1 Spark SQL核心--Catalyst Spark SQL的核心是Catalyst查询编译器,它将用户程序中的SQL/Dataset/DataFrame经过 ...

  6. Spark SQL Catalyst源代码分析Optimizer

    /** Spark SQL源代码分析系列*/ 前几篇文章介绍了Spark SQL的Catalyst的核心运行流程.SqlParser,和Analyzer 以及核心类库TreeNode,本文将具体解说S ...

  7. Spark SQL: Relational Data Processing in Spark

    Spark SQL: Relational Data Processing in Spark Spark SQL : Spark中关系型处理模块 说明: 类似这样的说明并非是原作者的内容翻译,而是本篇 ...

  8. Spark SQL 初识

    Spark SQL 初识 今天我们们学习一下Spark 的最最核心的组件,也是Spark中代码量最大,社区花费大量精力的模块 在实际工作中,使用频率最高的当属 Spark SQL,通常一个大数据处理项 ...

  9. Spark SQL概述

    1.介绍 Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用.使用Spark SQL有两种方式,包括SQL语句以及 ...

最新文章

  1. 程序分析工具gprof介绍
  2. struts2 ajax html,Struts2+Jquery+Ajax+Json
  3. 怎么用python处理excel文件-python处理Excel文件
  4. linux mysql UNSIGNED,关于mysql:MySqlint10-与-int-unsigned-之前的区别
  5. 【sql】leetcode习题 (共 42 题)
  6. PyODPS DataFrame 的代码在哪里跑
  7. mysql数据库备份方式,跳槽大厂必看!
  8. 计算机注销命令,Win7使用DOS命令实现定时自动关机,注销、重启的方法
  9. jsf标签,jsp标签与jstl标签
  10. python线性拟合、不确定性
  11. TiledMap的使用
  12. 在Colaboratory中使用ImageAI训练自己的数据集
  13. 电脑开机没反应怎么办?
  14. php中503代表什么,php 503是什么错误?_后端开发
  15. [WPF]Win10便签软件
  16. 平头哥RVB2601开发板实现LED彩灯
  17. IBM3650M4-7915服务器安装双CPU的问题
  18. AdMob Mediation + Vungle (iOS + Android)
  19. uni-app 跳转打开QQ对话框
  20. ReLuSeLu其他

热门文章

  1. 教你如何避开雪花算法的坑
  2. GANSynth论文翻译
  3. 个人项目github链接及README.md
  4. MQL4自编指标学习6-MQL4中MACD指标的实现
  5. csv文件 内容转义_保存csv文件时的生僻字处理和格式控制
  6. 你在小时候玩过哪些「恶心」的游戏?
  7. NetTerm 使用简介
  8. 常见而又容易被中小企业忽视的六个网络安全漏洞
  9. 最值得珍藏的420个生活小窍门
  10. 【Robomaster】电控入门手册