当前位置: 首页 > news >正文

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

  1. 参考OmniOperator部署文档下载并部署依赖包
  2. 将编译产物拷贝到${OMNI_HOME}/lib目录
  3. /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/

🚀 快速启动与验证

测试验证步骤

  1. 准备测试数据: 使用hive-testbench导入2GB TPCDS数据集
  2. 配置Spark参数: 添加omni相关参数并执行SQL查询
  3. 验证执行计划: 检查执行计划中的算子是否包含"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中可以找到详细的配置选项:

  1. 内存管理优化: 调整jemalloc配置提升内存分配效率
  2. 并行度调优: 根据集群规模调整executor配置
  3. Shuffle优化: 配置ColumnarShuffleManager提升shuffle性能

🔍 故障排查指南

常见问题及解决方案

  1. 编译失败 - 缺少依赖

    # 检查并安装缺失的依赖 yum install -y <缺失的包名>
  2. 运行时找不到库文件

    # 确认LD_LIBRARY_PATH设置正确 echo $LD_LIBRARY_PATH
  3. Spark任务失败

    • 检查Spark日志中的详细错误信息
    • 确认所有节点上的部署目录一致
    • 验证网络连接和权限设置

调试技巧

使用调试模式编译可以获取更详细的运行时信息:

bash cpp-omni/build.sh debug

📊 性能基准测试

完成部署后,建议进行性能基准测试以验证Gluten-Omni的性能提升效果:

  1. TPC-H基准测试: 使用标准TPC-H查询集进行性能对比
  2. TPC-DS基准测试: 测试复杂分析查询的性能
  3. 内存使用分析: 监控内存使用情况和GC行为

🔄 生产环境部署建议

集群部署最佳实践

  1. 统一环境: 确保所有计算节点环境一致
  2. 版本控制: 使用配置管理工具管理部署版本
  3. 监控告警: 设置性能监控和异常告警
  4. 滚动升级: 采用灰度发布策略减少风险

性能调优建议

  • 根据数据规模调整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),仅供参考

http://www.cnnetsun.cn/news/3033080.html

相关文章:

  • 如何快速部署Global Trust Authority RBS:10分钟搭建安全密钥分发系统
  • openYuanrong frontend源码解析:核心组件的实现原理
  • react native 0.72遇到react-native-screens库出现cxx编译问题的解决方案
  • 六层阻抗定制九大典型错误汇总!
  • witty-diagnosis-agent网络故障诊断:从物理层到应用层的完整排查流程
  • 从“流量焦虑”到“资产沉淀”:AI赋能下的长效经营
  • torch= PyTorch 的 Python API 入口
  • 【存储前沿】从实验室冷板凳到2026商业风口:RRAM凭什么成为存内计算(CIM)的“天选之子”?
  • IT爱学堂-FastAPI+LangChain打造智能招聘系统(完结),覆盖车载投屏、多媒体、智能语音等核心功能开发(完结)
  • 新能源电池模组捆扎钢带的技术瓶颈与工艺演进
  • witty-diagnosis-agent与OpenCode集成:智能运维平台的最佳实践指南
  • iSulad安全机制深度剖析:Seccomp优化与多架构适配技术
  • shell多级菜单脚本
  • AgentTeams 和 Claude Tag 都进入群聊模式,是新范式还是新叙事?
  • 企业AI落地诊断怎么做?一套实操方法论
  • 全自动量产赋能,易元智创app高效解决内容产能难题
  • Agent-Insight未来路线图:下一代AI Agent工程平台的发展方向
  • Yocto Poky核心解密:yocto-meta-openeuler构建原理与Layer Model实践
  • A-Tune性能调优案例研究:Redis内存数据库优化实战分析
  • FM3081SS//FM3081S8/FM3081TSS/FM3081S4 系列 单通道LED 线性恒流驱动控制IC
  • 【CANdelaStudio-从入门到深入到实战】66 从“配置恐惧症”到“配置自由”——用自动化流水线终结手动失误
  • 3分钟解锁网易云音乐加密文件:ncmdump免费开源工具终极指南
  • Android位置隔离技术:FakeLocation的架构哲学与实践策略
  • 如何高效抓取网页视频?猫抓浏览器扩展的智能解决方案
  • AI搜索时代企业曝光新法则:GEO优化揭秘
  • 猫抓浏览器扩展:3步掌握网页视频下载与资源嗅探技巧
  • 从钉钉审批到专业SRM采购系统:企业采购金额过亿后系统升级选型指南
  • 当银行AI员工月薪8000元上岗,你的ibbot手机才是真正的“超级数字员工”
  • 手把手教你在VIVADO工程创建SDK应用
  • 阴阳师百鬼夜行自动化脚本:智能识别与高效碎片收集终极指南