Spark-SQL 多维度聚合优化
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 多维度聚合优化相关推荐
- 字节跳动在 Spark SQL 上的核心优化实践
作者 | 郭俊 封图 | BanburyTang 字节跳动数据仓库架构团队负责数据仓库领域架构设计,支持字节跳动几乎所有产品线(包含但不限于抖音.今日头条.西瓜视频.火山视频)数据仓库方向的需求,如 ...
- 字节跳动在Spark SQL上的核心优化实践
字节跳动在Spark SQL上的核心优化实践 大数据架构 今天 以下文章来源于字节跳动技术团队 ,作者郭俊 字节跳动技术团队 字节跳动的技术实践分享 10月26日,字节跳动技术沙龙 | 大数据架构专场 ...
- 上海沙龙回顾 | 字节跳动在Spark SQL上的核心优化实践
10月26日,字节跳动技术沙龙 | 大数据架构专场 在上海字节跳动总部圆满结束.我们邀请到字节跳动数据仓库架构负责人郭俊,Kyligence 大数据研发工程师陶加涛,字节跳动存储工程师徐明敏,阿里云高 ...
- Spark SQL 在字节跳动的核心优化实践
10月26日,字节跳动技术沙龙 | 大数据架构专场 在上海字节跳动总部圆满结束.我们邀请到字节跳动数据仓库架构负责人郭俊,Kyligence 大数据研发工程师陶加涛,字节跳动存储工程师徐明敏,阿里云高 ...
- Spark SQL运行流程及性能优化:RBO和CBO
1 Spark SQL运行流程 1.1 Spark SQL核心--Catalyst Spark SQL的核心是Catalyst查询编译器,它将用户程序中的SQL/Dataset/DataFrame经过 ...
- Spark SQL Catalyst源代码分析Optimizer
/** Spark SQL源代码分析系列*/ 前几篇文章介绍了Spark SQL的Catalyst的核心运行流程.SqlParser,和Analyzer 以及核心类库TreeNode,本文将具体解说S ...
- Spark SQL: Relational Data Processing in Spark
Spark SQL: Relational Data Processing in Spark Spark SQL : Spark中关系型处理模块 说明: 类似这样的说明并非是原作者的内容翻译,而是本篇 ...
- Spark SQL 初识
Spark SQL 初识 今天我们们学习一下Spark 的最最核心的组件,也是Spark中代码量最大,社区花费大量精力的模块 在实际工作中,使用频率最高的当属 Spark SQL,通常一个大数据处理项 ...
- Spark SQL概述
1.介绍 Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用.使用Spark SQL有两种方式,包括SQL语句以及 ...
最新文章
- 程序分析工具gprof介绍
- struts2 ajax html,Struts2+Jquery+Ajax+Json
- 怎么用python处理excel文件-python处理Excel文件
- linux mysql UNSIGNED,关于mysql:MySqlint10-与-int-unsigned-之前的区别
- 【sql】leetcode习题 (共 42 题)
- PyODPS DataFrame 的代码在哪里跑
- mysql数据库备份方式,跳槽大厂必看!
- 计算机注销命令,Win7使用DOS命令实现定时自动关机,注销、重启的方法
- jsf标签,jsp标签与jstl标签
- python线性拟合、不确定性
- TiledMap的使用
- 在Colaboratory中使用ImageAI训练自己的数据集
- 电脑开机没反应怎么办?
- php中503代表什么,php 503是什么错误?_后端开发
- [WPF]Win10便签软件
- 平头哥RVB2601开发板实现LED彩灯
- IBM3650M4-7915服务器安装双CPU的问题
- AdMob Mediation + Vungle (iOS + Android)
- uni-app 跳转打开QQ对话框
- ReLuSeLu其他