7倍性能提升|阿里云AnalyticDB Spark向量化能力解析
The following article is from 阿里云瑶池数据库 Author 靳贺霖(庞贝)
1. AnalyticDB Spark产品架构
▶︎ ADB Spark上层面向用户提供多种调度入口,包括控制台,DMS以及Spark常用的spark-submit脚本等。
▶︎ 中间的管控服务提供资源、元数据、多租户以及安全管理等能力。
▶︎ 下层提供弹性Serverless形态的Spark,Spark集群通过统一的元数据服务管理库表信息,并通过统一的管控底座申请弹性资源。
2. 为什么做Spark向量化计算
3. 业界的Spark向量化方案
Databricks在2022年正式发布了向量化引擎Photon,还发表了相关的论文Photon-A Fast Query Engine for Lakehouse Systems[1],从测试效果看Photon性能非常好,但并没有开源,这也提供了对Spark加速的新思路。同年Kyligence和Intel合作开源了项Gluten,Gluten依赖Native Engine作为Backend,将算子下推到Velox或ClickHouse上加速执行。经过两年的社区迭代,当前Gluten已经支持了Spark的大部分算子和UDF。快手内部也一直在尝试Spark算子向量化,并且开源了Spark向量化处理插件Blaze,Blaze作为中间层,基于Rust语言的DataFusion来做向量化算子执行。除此之外苹果也开源了datafusion-comet,同样也是基于DataFusion和Arrow来做Spark算子向量化。
[1] 论文地址:https://people.eecs.berkeley.edu/~matei/papers/2022/sigmod_photon.pdf
4. ADB Spark的向量化方案
4.1 Gluten + Velox流程
4.2 ADB Spark Native Engine特性
4.2.1 全密态计算
4.2.2 易用性增强
而且访问OSS(对象存储)的数据源是Spark进行数据分析的常用场景。开源提供的hadoop-oss访问OSS需要配置明文ak,而使用明文ak可能会有信息安全风险。ADB Spark基于阿里云RAM系统自研了RAM&STS方案,Spark Driver/Executor会周期性的请求元数据服务中心刷新STS Token,从而实现免AK访问OSS数据源。这个特性不仅在非Native Engine场景支持,同时也在Native Engine的Velox访问OSS中也做了支持。
4.2.3 UDF支持
我们在推广用户使用ADB Spark Native Engine的过程中,部分客户的query中使用了较多的Spark UDF,如from_json,from_csv等。这类UDF当前在Gluten社区中尚未支持,客户测试场景下会因为UDF不支持导致算子回退到Java引擎,中间引起了较多的行列转换开销导致性能较差。
ADB Spark针对这些场景做了重点优化,当前from_json等UDF已经在内部发布上线,客户测试SQL中也未出现算子回退导致额外的行列转换开销。
4.2.4 集成智能缓存
5. ADB Spark性能
5.1 测试信息
5.1.1 测试对比项
测试对比项 |
开源 Spark 3.2.0 |
ADB Spark 3.2.0 |
5.1.2 数据集
TPC-H 1T 全query
5.1.3 ADB spark集群规格
Executor:40 * 2core8g
5.2 测试结果
TPC-H测试下,query的总耗时如下:
开源Spark | ADB Spark | |
---|---|---|
总耗时 (秒) | 4351.506 | 623.273 |
各query的耗时对比如下:
6. 总结和未来规划
6.1 全网开放向量化能力
当前我们的向量化能力在客户邀测阶段,未来会开放该功能,让更多客户进行体验。
6.2 支持更多的场景
Gluten/Velox持续跟进社区。当前Gluten/Velox社区更新迭代很快,我们会保持月度测试和跟进社区Gluten/Velox的能力。
支持更多的数据源,如jindo fs,aws s3等。
更多客户通用的自定义场景的适配,如支持客户常用的UDF。
6.3 软硬件结合
点击了解 云原生数据仓库AnalyticDB