10分钟快速上手Gluten:ARM平台上Spark SQL性能优化实战指南
【免费下载链接】GlutenThis repository is a mirror repository for the integration between the OmniRuntime system and Gluten.项目地址: https://gitcode.com/openeuler/Gluten
前往项目官网免费下载:https://ar.openeuler.org/ar/
Gluten是openEuler社区推出的Spark SQL性能加速引擎,通过Columnar执行模式显著提升ARM平台上的数据分析效率。本指南将帮助你在10分钟内完成从环境配置到性能测试的全流程,让你的Spark作业在ARM架构下焕发新生🚀
📋 环境准备:ARM平台兼容性检查
Gluten在ARM平台(aarch64架构)上已实现完整支持,需确保系统满足以下要求:
- 操作系统:Ubuntu 20.04/22.04 或 CentOS 7/8
- Java环境:OpenJDK 8(推荐)或 JDK 17
- Spark版本:3.2.2/3.3.1/3.4.3/3.5.2(官方验证版本)
- 基础依赖:Maven 3.6+、Git、CMake 3.16+
Gluten Columnar执行流程示意图,展示从Spark SQL到Native执行的加速路径
⚙️ 一键部署:ARM平台专属安装脚本
1. 代码获取与环境变量配置
# 克隆官方仓库 git clone https://gitcode.com/openeuler/Gluten cd Gluten # 配置ARM专用JDK环境 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64 export PATH=$JAVA_HOME/bin:$PATH2. 编译优化:针对ARM架构的构建命令
Gluten提供专为ARM平台优化的编译脚本,通过CPU_TARGET参数自动适配aarch64架构:
# 设置ARM架构编译目标 export CPU_TARGET="aarch64" # 执行一键构建(包含Velox后端) ./dev/buildbundle-veloxbe.sh⏱️编译提示:首次构建会下载依赖,建议配置Maven镜像加速。可通过
export NUM_THREADS=4限制并行编译线程数,避免ARM平台内存溢出。
编译产物位于package/target/目录,生成如gluten-velox-bundle-spark3.3_2.12-1.0.0-SNAPSHOT.jar的完整包。
🔧 核心配置:解锁ARM平台性能潜力
Spark配置优化
在spark-defaults.conf中添加以下配置,启用Gluten加速并优化ARM资源利用:
# 启用Gluten插件 spark.plugins=org.apache.gluten.GlutenPlugin # 使用Columnar Shuffle管理器 spark.shuffle.manager=org.apache.spark.shuffle.sort.ColumnarShuffleManager # 配置OffHeap内存(建议为物理内存的50%) spark.memory.offHeap.enabled=true spark.memory.offHeap.size=20g # ARM平台内存优化 spark.gluten.sql.columnar.backend.velox.spillStrategy=auto spark.gluten.sql.columnar.forceShuffledHashJoin=true验证安装
通过spark-shell验证Gluten是否正确加载:
spark-shell --jars package/target/gluten-velox-bundle-spark3.3_2.12-1.0.0-SNAPSHOT.jar在Spark Shell中执行spark.sparkContext.getConf.get("spark.plugins"),应返回org.apache.gluten.GlutenPlugin。
🚀 性能测试:ARM平台TPC-H基准验证
数据准备
使用Gluten提供的TPC-H数据生成工具(位于tools/workload/tpch/):
# 生成SF100规模的Parquet格式数据 ./tools/workload/tpch/gen_data/parquet_dataset/tpch_datagen_parquet.sh 100 /path/to/tpch-data执行查询
提交TPC-H Q6查询测试性能:
spark-submit \ --class org.apache.spark.sql.GlutenTPC \ --master yarn \ --conf spark.driver.extraClassPath=package/target/gluten-velox-bundle-spark3.3_2.12-1.0.0-SNAPSHOT.jar \ --conf spark.executor.extraClassPath=package/target/gluten-velox-bundle-spark3.3_2.12-1.0.0-SNAPSHOT.jar \ package/target/gluten-velox-bundle-spark3.3_2.12-1.0.0-SNAPSHOT.jar \ --data-path /path/to/tpch-data \ --query 6Gluten与原生Spark在ARM平台上的TPC-H 10查询性能对比,平均加速2.3倍
📊 监控与调优:Gluten UI与性能诊断
Gluten提供专属监控界面,可直观查看执行计划和性能指标:
# 启用Gluten UI spark.gluten.ui.enabled=true访问Spark UI的Gluten SQL / DataFrame标签页,可查看:
- 各算子的Native执行状态
- 内存使用和溢出统计
- 执行计划 fallback 详情
Gluten UI展示的查询执行详情,包含Native计划和性能指标
💡 进阶技巧:ARM平台深度优化
1. 内存管理优化
针对ARM平台内存带宽特性,调整Velox内存分配策略:
# 启用HBM(高带宽内存)支持(如硬件支持) spark.gluten.sql.columnar.backend.velox.hbmEnabled=true # 设置内存溢出阈值 spark.gluten.sql.columnar.backend.velox.maxSpillLevel=42. 并发控制调整
根据ARM核心数优化并行度:
# 设置Executor核心数(建议为ARM物理核心数的1-1.5倍) --executor-cores 8 # 调整Shuffle并行度 spark.sql.shuffle.partitions=200❓ 常见问题解决
Q:编译时提示"aarch64架构不支持"?
A:确保使用最新代码,执行git pull同步主分支,ARM支持已合并到主线。
Q:查询出现Fallback警告?
A:检查spark.gluten.sql.columnar.fallback.allow配置,通过Gluten UI查看具体不支持的算子,参考支持状态文档。
Q:ARM平台内存占用过高?
A:启用内存溢出功能spark.gluten.sql.columnar.backend.velox.spillStrategy=auto,并调整spark.memory.offHeap.size至物理内存的40%。
📚 资源与文档
- 官方文档:docs/get-started/Velox.md
- 性能调优指南:docs/developers/ProfileMemoryOfGlutenWithVelox.md
- 代码仓库:通过
git clone https://gitcode.com/openeuler/Gluten获取最新代码
通过本指南,你已掌握在ARM平台部署和优化Gluten的核心技能。立即体验Columnar执行带来的性能飞跃,让Spark SQL在ARM架构下发挥最大潜力!✨
【免费下载链接】GlutenThis repository is a mirror repository for the integration between the OmniRuntime system and Gluten.项目地址: https://gitcode.com/openeuler/Gluten
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考