Gluten-Omni编译部署完全指南:从源码到生产环境的完整流程
Gluten-Omni编译部署完全指南:从源码到生产环境的完整流程
【免费下载链接】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/
🚀 想要在ARM平台上获得卓越的Spark数据处理性能吗?Gluten-Omni正是您需要的解决方案!作为openEuler社区的重要项目,Gluten-Omni将Spark计算框架与鲲鹏自研的OmniRuntime向量化执行引擎完美结合,为大数据处理带来了革命性的性能提升。本终极指南将带您从零开始,完成Gluten-Omni的完整编译部署流程。
📋 前置环境准备
在开始编译之前,您需要确保系统满足以下基础环境要求:
系统要求
- 操作系统: openEuler 22.03 LTS SP1 或更高版本
- 处理器架构: ARM64(鲲鹏平台)
- 内存: 至少8GB RAM(推荐16GB+)
- 磁盘空间: 至少20GB可用空间
依赖软件安装
# 安装基础编译工具 yum install -y git cmake make gcc gcc-c++ java-11-openjdk maven # 安装必要的开发库 yum install -y openssl-devel libcurl-devel zlib-devel克隆项目代码
git clone https://gitcode.com/openeuler/Gluten cd Gluten🔧 完整编译流程详解
Gluten-Omni的编译分为两个主要部分:C++核心库编译和Java/Scala打包编译。
第一步:编译C++核心库
C++部分是Gluten-Omni的性能核心,编译命令位于cpp-omni/build.sh:
# 进入项目根目录 cd Gluten # 编译cpp代码,生成libspark_columnar_plugin.so bash cpp-omni/build.sh编译选项说明:
- debug模式:
bash cpp-omni/build.sh debug- 启用调试信息 - release模式:
bash cpp-omni/build.sh release- 生产环境优化(默认) - 测试模式:
bash cpp-omni/build.sh test- 包含测试用例 - 覆盖率分析:
bash cpp-omni/build.sh coverage- 生成代码覆盖率报告
第二步:编译Java/Scala打包
Java/Scala部分负责与Spark框架的集成:
# 编译Java/Scala代码,生成gluten-omni-bundle-spark3.3_2.12-openEuler_22.03_aarch_64-1.3.0.jar mvn clean package -Pbackends-omni -Pspark-3.3 -DskipTests -Dspotless.check.skip=true -Dscalastyle.skip=true -Dcheckstyle.skip=true重要提示: Gluten-Omni编译和运行均依赖OmniOperator。如果尚未编译部署OmniOperator,请先参考OmniOperator官方文档进行编译部署。
📦 环境部署与配置
OmniOperator环境准备
假定OMNI_HOME为/opt/omni-operator:
- 参考OmniOperator部署文档下载并部署依赖包
- 将编译产物拷贝到
${OMNI_HOME}/lib目录 - 将
/opt/omni-operator目录拷贝到任务提交节点和所有计算节点
部署编译产物
# 创建部署目录 mkdir -p /opt/gluten-omni/lib # 拷贝编译产物 cp cpp-omni/build/libspark_columnar_plugin.so /opt/gluten-omni/lib/ cp backends-omni/target/gluten-omni-bundle-spark3.3_2.12-openEuler_22.03_aarch_64-1.3.0.jar /opt/gluten-omni/lib/ cp ${OMNI_HOME}/lib/boostkit-omniop-bindings-2.2.0-aarch64.jar /opt/gluten-omni/lib/🚀 快速启动与验证
测试验证步骤
- 准备测试数据: 使用hive-testbench导入2GB TPCDS数据集
- 配置Spark参数: 添加omni相关参数并执行SQL查询
- 验证执行计划: 检查执行计划中的算子是否包含"Omni"
参考启动命令
export OMNI_HOME=/opt/gluten-omni export LD_LIBRARY_PATH=/opt/gluten-omni/lib:/usr/local/lib64 spark-sql --master yarn \ --driver-cores 20 \ --driver-memory 40g \ --num-executors 12 \ --executor-cores 40 \ --executor-memory 20g \ --conf spark.memory.offHeap.enabled=true \ --conf spark.memory.offHeap.size=100g \ --conf spark.sql.orc.impl=native \ --conf spark.network.timeout=600 \ --conf spark.sql.broadcastTimeout=600 \ --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \ --conf spark.shuffle.manager=org.apache.spark.shuffle.sort.ColumnarShuffleManager \ --conf spark.gluten.sql.columnar.backend.lib=omni \ --conf spark.plugins=org.apache.gluten.GlutenPlugin \ --conf spark.driver.extraClassPath=/opt/gluten-omni/lib/gluten-omni-bundle-spark3.3_2.12-openEuler_22.03_aarch_64-1.3.0.jar:/opt/gluten-omni/lib/boostkit-omniop-bindings-2.2.0-aarch64.jar \ --conf spark.executor.extraClassPath=/opt/gluten-omni/lib/gluten-omni-bundle-spark3.3_2.12-openEuler_22.03_aarch_64-1.3.0.jar:/opt/gluten-omni/lib/boostkit-omniop-bindings-2.2.0-aarch64.jar \ --conf spark.executorEnv.LD_LIBRARY_PATH=/opt/gluten-omni/lib:/usr/local/lib64 \ --conf spark.executorEnv.OMNI_HOME=/opt/gluten-omni \ --conf spark.driverEnv.LD_LIBRARY_PATH=/opt/gluten-omni/lib:/usr/local/lib64 \ --conf spark.driverEnv.OMNI_HOME=/opt/gluten-omni \ --conf spark.executorEnv.MALLOC_CONF=narenas:2 \ --conf spark.driverEnv.LD_PRELOAD=/usr/local/lib/libjemalloc.so.2 \ --conf spark.executorEnv.LD_PRELOAD=/usr/local/lib/libjemalloc.so.2 \ --conf spark.gluten.sql.columnar.libpath=/opt/gluten-omni/lib/libspark_columnar_plugin.so \ --conf spark.sql.shuffle.partitions=1000 \ --conf spark.sql.adaptive.coalescePartitions.minPartitionNum=400 \ --conf spark.sql.adaptive.coalescePartitions.initialPartitionNum=400 \ --conf spark.kryoserializer.buffer.max=1024m \ --conf spark.gluten.sql.columnar.backend.omni.combineJoinedAggregates=true \ --conf spark.gluten.sql.columnar.backend.omni.joinReorderEnhance=true验证成功标志: 执行计划中显示包含"Omni"算子,表示Gluten-Omni已成功启用!
⚙️ 高级配置选项
编译参数定制
您可以根据需求调整编译参数:
# 开启调试信息编译 bash cpp-omni/build.sh debug # 编译包含测试用例 bash cpp-omni/build.sh test # 为不同Spark版本编译 mvn clean package -Pbackends-omni -Pspark-3.4 -DskipTests性能优化配置
在Configuration.md中可以找到详细的配置选项:
- 内存管理优化: 调整jemalloc配置提升内存分配效率
- 并行度调优: 根据集群规模调整executor配置
- Shuffle优化: 配置ColumnarShuffleManager提升shuffle性能
🔍 故障排查指南
常见问题及解决方案
编译失败 - 缺少依赖
# 检查并安装缺失的依赖 yum install -y <缺失的包名>运行时找不到库文件
# 确认LD_LIBRARY_PATH设置正确 echo $LD_LIBRARY_PATHSpark任务失败
- 检查Spark日志中的详细错误信息
- 确认所有节点上的部署目录一致
- 验证网络连接和权限设置
调试技巧
使用调试模式编译可以获取更详细的运行时信息:
bash cpp-omni/build.sh debug📊 性能基准测试
完成部署后,建议进行性能基准测试以验证Gluten-Omni的性能提升效果:
- TPC-H基准测试: 使用标准TPC-H查询集进行性能对比
- TPC-DS基准测试: 测试复杂分析查询的性能
- 内存使用分析: 监控内存使用情况和GC行为
🔄 生产环境部署建议
集群部署最佳实践
- 统一环境: 确保所有计算节点环境一致
- 版本控制: 使用配置管理工具管理部署版本
- 监控告警: 设置性能监控和异常告警
- 滚动升级: 采用灰度发布策略减少风险
性能调优建议
- 根据数据规模调整executor内存和核心数
- 合理设置shuffle分区数避免数据倾斜
- 启用off-heap内存提升大内存操作性能
- 配置合适的序列化器减少网络传输开销
🎯 总结
通过本完整指南,您已经掌握了Gluten-Omni从源码编译到生产部署的全流程。Gluten-Omni作为openEuler社区的重要大数据加速项目,为ARM平台上的Spark计算带来了显著的性能提升。无论是开发测试还是生产部署,遵循本文的步骤都能确保您顺利使用这一强大的数据计算加速方案。
💡核心优势总结:
- 🚀 显著提升Spark在ARM平台的性能
- 🔧 与Spark生态无缝集成
- 📈 支持向量化执行优化
- 🛡️ 经过openEuler社区验证的稳定方案
现在就开始您的Gluten-Omni之旅,体验下一代大数据计算加速技术带来的极致性能!
【免费下载链接】GlutenThis repository is a mirror repository for the integration between the OmniRuntime system and Gluten.项目地址: https://gitcode.com/openeuler/Gluten
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
