EMR Spark-SQL性能极致优化揭秘 概览篇

简介: 这次的优化里面,还有一个很好玩的优化,就是我们引入的 Native Runtime,如果说上述的优化器优化都是一些特殊 Case 的杀手锏,Native Runtime 就是一个广谱大杀器,根据我们后期统计,引入 Native Runtime,可以普适性的提高 SQL Query 15~20%的 E2E 耗时,这个在TPCDS Perf 里面也是一个很大的性能提升点。

作者:林学维,阿里云智能EMR团队技术专家,目前主要专注于EMR产品中开源计算引擎的优化工作


引子

最近阿里云 E-MapReduce 团队在 TPCDS-Perf 榜单中提交了最新成绩,相比第二名(其实也是 EMR 团队于 2019 年提交的记录),无论从性能还有性价比都取得了 2 倍+的优秀成绩!详细看 TPCDS Perf

tpcds

阿里云 E-MapReduce 团队,除了在产品、易用性、安全性等维度上投入了大量的研发资源和精力,打造了 EMR 这样一个广受好评的大数据产品;在引擎层面上也长期投入,持续深耕,目的就是要在保持开源软件的 100% 兼容性的同时,要利用团队的技术深度去打造产品的技术壁垒,让客户在使用开源软件栈的时候,能够获得更多的性价比,真真切切的把云上成本降低到极致,让客户能够在上云的过程中没有疑虑和后顾之忧。

阿里云 E-MapReduce 团队在 TPCDS Perf 中取得的成绩也足以验证,团队在 SPARK 引擎的技术深度以及技术实力,接下来会有一个系列的文章,去介绍我们 2020 年度打榜过程的一些优化点还有思考,欢迎社区里的 spark 引擎开发者或者 spark 应用开发者可以关注我们的系列文章,也欢迎来和我们交流,最关键的是,欢迎多投简历,加入阿里云 E-MapReduce 团队,我们求贤若渴!!!

第三次刷榜的 Flag

从上述的 TPCDS Perf 链接中,我们可以看到,其实 EMR 团队在 10TB 规模总共提交了三次成绩。第三次也就是这一次打榜,背后还有一个小故事。因为在 Perf 页面中,最终 TPCDS 关注的指标有两个,一个是性能指标一个是性价比指标。这次项目立项的时候,我们就给自己立下了一个艰难的 Flag ,我们要在物理硬件保持不变的条件下,纯靠软件优化提升 2 倍+,这样子性能指标和性价比指标就都能翻倍了。

与开源 Spark 版本的一些对比数据

在提交完成绩后,我们用开源 Spark V2.4.3 版本进行了 TPCDS 99 Query 测试,以下是性能数据对比

Load 阶段性能提升约 3 X

load

PT 阶段性能提升约 6 X

pt

PS. 其中社区 Spark V2.4.3 版本中 Query 14 以及 Query 95 因为 OOM 的原因没法跑出来,不纳入计算

社区 Spark 版本运行时间大于 200S 的 Query 单独拿出来对比

_200

PS. 这几个 Query 最低的 Query 78 有 3X 性能提升,Query 57有接近 100 倍的性能提升。

优化点概述

优化器

  • 基于 InMemoryTable Cache 的 CTE 物化

简单来说,就是尽量更合理的利用 InMemoryTable Cache 去减少不必要的重复计算,比如说 Query 23A/B 中的标量计算,本身是非常重的操作,并且又必须重复的计算,通过 CTE 优化的模式匹配,识别出需要重复计算且比较耗时的操作,并利用 InMemoryTable 缓存,整体减少 E2E 时间

  • 更加有效的 Filter 相关优化

    • Dynamic Partition Pruning 这个在社区最新的3.0版本才有这个功能
    • 小表广播复用 一个具有过滤性的小表,如果可以过滤 2 个或以上的打表数据时,可以复用该小表的过滤效果 Query 64 就是一个好例子
    • BloomFilter before SMJ 在 SMJ 真正实施之前,通过前置 BloomFilter ,Join 过程的数据进一步减少,最大限度的消除 SpillDisk 的问题
  • PK/FK Constraint 优化 通过主键外键信息,对优化器提供更多的优化建议

    • RI-Join 去除 事实表与维表于主键外键上做 Join ,但是维表的列并没有被 Project 的情况下,这次 Join 其实完全没有必要执行
    • GroupBy Keys 去除非主键列 当GroupBy Keys 中同时包括主键列以及非主键列,其实非主键列对 GroupBy 结果已经没有影响了,因为主键列已经隐含了 Unique 的信息
    • GroupBy Push Down before Join
  • Fast Decimal

基于 Table Analyze 以及运行时中的 Stat 信息,优化器可以决定把某些 Decimal 优化为 Long 或者 Int 的计算,这会有极大的提升,而 TPCDS 99 Query 里有大量的 Decimal 计算

运行时

这次的优化里面,还有一个很好玩的优化,就是我们引入的 Native Runtime,如果说上述的优化器优化都是一些特殊 Case 的杀手锏,Native Runtime 就是一个广谱大杀器,根据我们后期统计,引入 Native Runtime,可以普适性的提高 SQL Query 15~20%的 E2E 耗时,这个在TPCDS Perf 里面也是一个很大的性能提升点。

大致的介绍一下 Native Runtime
基于开源版本的 WholeStageCodeGeneration 的框架,在原有的生成的 Java 代码,替换成 Weld IR 来真实运行。Weld详细参考 http://weld.stanford.edu/。在整个项目里,Weld IR 的替换其实是非常小的一部分工作,为了Weld IR 能够运行起来,我们还需要做以下的工作

  • Expression Weld IR CodeGen ( TPCDS 范围内全支持)
  • Operators Weld IR CodeGen (除了 SortMergeJoin 用 C++ 实现,其他均可以用 Weld IR 代替)
  • 统一内存布局 (OffHeap UnsafeRow => C++ & Weld Runtime)
  • Batch 化执行框架 (因为如果按照 Java 运行时,每次都是一条记录的在生成代码里流转,在 NativeRuntime 的时间里代价太高, JNI 以及WeldRuntime 明显不能这么玩)
  • 其他高性能Native算子 SortMergeJoin、PartitionBy、CSV Parsing,这几个算子目前用 Weld IR 提供的接口无法直接实现,我们通过 C++来实现这些算子的 Native 执行

结语

这个文章只是大概的介绍了这次性能优化的一些优化点,在接下来的系列文章里,我们会针对每一个优化点细致的展开、分析,希望对 Spark-SQL 有兴趣的同学们可以多多关注,多多捧场。同时,我们也希望对 EMR 团队有兴趣的同学,积极联系我们,我们真的求贤若渴,海量 HC ,请有兴趣者联系 林学维(峰七) 18518298234,也可邮箱 xuewei.linxuewei@alibaba-inc.com !!!


推荐阅读
EMR Spark-SQL性能极致优化揭秘 RuntimeFilter Plus


阿里巴巴开源大数据技术团队成立Apache Spark中国技术社区,定期推送精彩案例,技术专家直播,问答区近万人Spark技术同学在线提问答疑,只为营造纯粹的Spark氛围,欢迎钉钉扫码加入!

image.png

对开源大数据和感兴趣的同学可以加小编微信(下图二维码,备注“进群”)进入技术交流微信群。
image.png

Apache Spark技术交流社区公众号,微信扫一扫关注

image.png

相关文章
|
SQL 分布式计算 Serverless
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
鹰角网络为应对游戏业务高频活动带来的数据潮汐、资源弹性及稳定性需求,采用阿里云 EMR Serverless Spark 替代原有架构。迁移后实现研发效率提升,支持业务快速发展、计算效率提升,增强SLA保障,稳定性提升,降低运维成本,并支撑全球化数据架构部署。
1378 56
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
|
7月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
395 6
|
SQL 存储 自然语言处理
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
|
11月前
|
人工智能 分布式计算 DataWorks
一体系数据平台的进化:基于阿里云 EMR Serverless Spark 的持续演进
本文介绍了一体系汽配供应链平台如何借助阿里云EMR Serverless Spark实现从传统Hadoop平台向云原生架构的迁移。通过融合高质量零部件供应与创新互联网科技,一体系利用EMR Serverless Spark和DataWorks构建高效数据分析体系,解决大规模数据处理瓶颈。方案涵盖实时数据集成、Lakehouse搭建、数仓分层设计及BI/ML应用支持,显著提升数据处理性能与业务响应速度,降低运维成本,为数字化转型奠定基础。最终实现研发效率提升、运维压力减轻,并推动AI技术深度整合,迈向智能化云原生数据平台。
394 4
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
SQL 分布式计算 Serverless
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
369 0
|
DataWorks 数据挖掘 Serverless
阿里云EMR Serverless StarRocks 内容合集
阿里云 EMR StarRocks 提供存算分离架构,支持实时湖仓分析,适用于多种 OLAP 场景。结合 Paimon 与 Flink,助力企业高效处理海量数据,广泛应用于游戏、教育、生活服务等领域,显著提升数据分析效率与业务响应速度。
553 0
|
存储 分布式计算 OLAP
百观科技基于阿里云 EMR 的数据湖实践分享
百观科技为应对海量复杂数据处理的算力与成本挑战,基于阿里云 EMR 构建数据湖。EMR 依托高可用的 OSS 存储、开箱即用的 Hadoop/Spark/Iceberg 等开源技术生态及弹性调度,实现数据接入、清洗、聚合与分析全流程。通过 DLF 与 Iceberg 的优化、阶梯式弹性调度(资源利用率提升至70%)及倚天 ARM 机型搭配 EMR Trino 方案,兼顾性能与成本,支撑数据分析需求,降低算力成本。
827 59
|
存储 分布式计算 物联网
美的楼宇科技基于阿里云 EMR Serverless Spark 构建 LakeHouse 湖仓数据平台
美的楼宇科技基于阿里云 EMR Serverless Spark 建设 IoT 数据平台,实现了数据与 AI 技术的有效融合,解决了美的楼宇科技设备数据量庞大且持续增长、数据半结构化、数据价值缺乏深度挖掘的痛点问题。并结合 EMR Serverless StarRocks 搭建了 Lakehouse 平台,最终实现不同场景下整体性能提升50%以上,同时综合成本下降30%。
1081 58