Apache Gluten与Delta Lake集成:加速数据湖查询的实战案例
【免费下载链接】glutenGluten is a middle layer responsible for offloading JVM-based SQL engines' execution to native engines.项目地址: https://gitcode.com/GitHub_Trending/glu/gluten
Apache Gluten是一个中间层框架,通过将JVM-based SQL引擎的执行卸载到原生引擎(如Velox)来提升数据处理性能。本文将详细介绍如何通过Gluten与Delta Lake的深度集成,实现数据湖查询的显著加速,并提供完整的实战配置指南。
为什么选择Gluten+Delta Lake?
Delta Lake作为流行的事务性数据湖解决方案,提供ACID事务、时间旅行和 schema 演化等核心功能。然而,在处理大规模数据时,传统Spark引擎的JVM执行模式往往面临性能瓶颈。Apache Gluten通过以下方式解决这一痛点:
- 原生执行加速:将SQL算子下推到C++实现的Velox引擎,减少JVM内存开销和GC压力
- 向量化处理:利用Velox的向量化执行引擎,大幅提升数据处理吞吐量
- 无缝集成:无需修改现有Delta Lake表结构和Spark应用代码
图1:Gluten加速Delta Lake查询的架构流程图(分辨率:950x433)
支持的版本组合与核心功能
Gluten对Delta Lake的支持需要特定的Spark和Delta版本组合。目前推荐的配置如下:
| Spark profile | Spark版本 | Scala版本 | Delta Lake版本 | 状态 |
|---|---|---|---|---|
spark-3.5 | 3.5.x | 2.12 | 3.3.x | 支持 |
spark-4.0 | 4.0.x | 2.13 | 4.0.x | 支持 |
核心功能支持情况:
| 功能 | Delta最低版本 | 支持状态 |
|---|---|---|
| 基础读写 | 2/1 | ✅ 完全支持 |
| 变更数据捕获(CDC) | 4/1 | ✅ 支持 |
| 列映射 | 5/2 | ✅ 支持 |
| 身份列 | 6/1 | ✅ 支持 |
| 液体聚类 | 7/3 | ✅ 支持 |
| 删除向量 | 7/3 | ⚠️ 部分支持 |
| 生成列 | 4/1 | ⚠️ 部分支持 |
完整支持列表参见官方文档:VeloxDelta.md
实战配置:从构建到运行
1. 构建Gluten(带Delta支持)
# Spark 3.5 + Delta 3.3构建 mvn clean package -Pbackends-velox -Pdelta -Pspark-3.5 -DskipTests # Spark 4.0 + Delta 4.0构建 mvn clean package -Pbackends-velox -Pdelta -Pspark-4.0 -Pscala-2.13 -Pjava-17 -DskipTests2. 启用原生Delta写入
通过以下配置启用Gluten的原生Delta写入能力(实验性功能):
spark.conf.set("spark.gluten.sql.columnar.backend.velox.delta.enableNativeWrite", "true")3. TPC-DS性能测试案例
使用TPC-DS基准测试验证集成效果:
- 生成测试数据:
cd ${GLUTEN_HOME}/tools/workload/tpcds-delta/gen_data ./tpcds-datagen-delta.sh --benchmark-type=ds --threads=112 -s=100 --data-dir=/tmp/delta-data- 运行查询测试:
spark-submit \ --conf spark.driver.extraClassPath=${GLUTEN_JAR} \ --conf spark.executor.extraClassPath=${GLUTEN_JAR} \ run_tpcds.scala性能提升效果
在100GB TPC-DS数据集上的测试结果显示,Gluten+Velox后端相比原生Spark3.1.1平均提升30%-50%的查询性能:
图2:Gluten+Velox与原生Spark在10个TPC-DS查询上的性能对比(单位:秒,越低越好)
关键优化点:
- Q4查询:3.63秒 vs 原生Spark 5.21秒(提升30%)
- Q22查询:3.43秒 vs 原生Spark 5.12秒(提升33%)
- Q13查询:2.11秒 vs 原生Spark 3.87秒(提升45%)
常见问题与解决方案
1. 构建失败:缺少Delta依赖
解决方案:确保构建命令中包含-Pdelta参数,如:
mvn clean package -Pbackends-velox -Pdelta -Pspark-3.52. 运行时错误:不支持的Delta特性
解决方案:检查VeloxDelta.md中的功能支持列表,避免使用如CHECK约束、TimestampNTZ等尚未支持的特性。
3. 性能未达预期
解决方案:
- 确认
spark.gluten.sql.columnar.backend.velox.delta.enableNativeWrite已设为true - 检查是否使用了支持的Spark/Delta版本组合
- 参考性能调优指南:VeloxStageResourceAdj.md
总结
Apache Gluten与Delta Lake的集成为数据湖查询提供了显著的性能提升,同时保持了Delta Lake的事务性和灵活性。通过本文介绍的配置步骤,您可以轻松将现有Delta Lake工作负载迁移到Gluten加速环境,获得30%-50%的查询性能提升。
随着Gluten项目的持续发展,未来将支持更多Delta Lake高级特性,进一步优化数据湖分析性能。建议通过以下资源获取最新信息:
- 源码仓库:git clone https://gitcode.com/GitHub_Trending/glu/gluten
- 测试脚本:tpcds-delta
- 配置文档:VeloxDelta.md
【免费下载链接】glutenGluten is a middle layer responsible for offloading JVM-based SQL engines' execution to native engines.项目地址: https://gitcode.com/GitHub_Trending/glu/gluten
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考