EMR Spark-SQL性能极致优化揭秘 Native Codegen Framework

主题:
EMR Spark-SQL性能极致优化揭秘 Native Codegen Framework

时间:
7月30日 周四 19:00

参与直播方式:
扫描下方钉钉二维码进群,届时是直接观看
或届时进入直播间
https://developer.aliyun.com/live/43579

议题简介:
EMR团队探索并开发了SparkSQL Native Codegen框架,为SparkSQL换了引擎,新引擎带来最高4倍性能提升,为EMR再次获取世界第一立下汗马功劳,本次直播将详细介绍Native Codegen框架。

讲师简介:
周克勇,花名一锤,阿里巴巴计算平台事业部EMR团队技术专家,大数据领域技术爱好者,对Spark有浓厚兴趣和一定的了解,目前主要专注于EMR产品中开源计算引擎的优化工作。

参考文章
EMR Spark-SQL性能极致优化揭秘 Native Codegen Framework

展开查看详情

1. 阿里云-EMR EMR Spark性能揭秘: Native Codegen Framework 周克勇(一锤)

2. 大纲 • 背景和动机 • 核心问题 • 总结

3.背景和动机

4.背景 • Optimizer: 获得最优执行计划 • Runtime: 使计划执行的更快 • Runtime: 解决硬件限制 • MapReduce, 网络 => Locality • Spark, 磁盘IO => 内存缓存 • 现在: CPU • Enhanced Optimizer • CTE • DPP • 小表广播 • PK/FK优化 • Fast Decimal • Native Runtime • Native Codegen • 统一内存布局 • Batch化执行框架

5. 背景 传统做法:火山模型 向量化 Codegen • 批量执行 • 算子融合 • 列式存储 • 编译执行 • 小循环 • 大循环 • 数据并行: SIMD • 寄存器访问 • 指令并行: OoO 低效 代表 代表 • 每条record都需要虚函数调用 • Hyper(2011) • MonetDB/X100(2005) • 中间数据物化到内存 • Apache Spark • Photon(2020) 缺点:中间数据大 缺点: • 难以SIMD

6.动机 Java Codegen的限制 • Java性能劣于Native Code • Java语义限制 • SIMD Native Codegen • Prefetch • 内存控制 • NativeCode直接操作裸金属 • 新硬件 不对现有框架做太多改变

7.核心问题

8. 核心问题 • 生成什么 • 怎么生成 • Spark集成

9.生成什么 • C/C++ • 缺陷: 编译时间过长 • LLVM • 缺陷: 过于复杂 • Weld IR •

10.Weld简介 • Matei学生作品 • https://github.com/weld-project/weld • Language + Compiler + Runner select col1 from t where col2 > 10 • 语法 |v: vec[{i32,i32}]| • 类型系统: struct, vec for(v, appender, • 类函数式语言 |b,i,n| if( • 跟C互调 n.$1 > 10, merge(b,n.$0), b) ) weld_module_compile weld_module_run

11. 怎么生成 • 复用Spark Codegen框架 • Expression级别 • doGenCode() è doGenNativeCode • col1 + col2 è v.$0 + v.$1 • WholeStage级别 • 复用producer/consumer框架 • CodeGenSupport è NativeCodeGenSupport • doProduce è doProduceNative • doConsume è doConsumeNative

12.WholeStage Codegen select col1 from t where col2 > 1000

13.Fallback • 某些算子尚未支持NativeCodegen • Rollup • SMJ • 算子粒度 • 缺陷: Pipeline断裂,中间物化数据 • Stage粒度 • 一个算子不支持即Fallback

14.Spark集成 统一内存布局 黑盒执行 vec[{i64,i64,i64,i64,i64}]

15.Spark集成 • 执行流程

16.总结 • 生成什么 • Weld IR • 怎么生成 • Spark Codegen框架 • Stage级别Fallback • 跟Spark集成 • 统一内存布局 • 执行流程 • 其他优化 • 算子Native优化(SMJ, PartitionBy) • Weld Dict优化

17.EMR产品交流钉钉群 微信关注技术公众号

18.THANKS!