Apache Gluten架构全景图:Substrait如何桥接JVM与原生引擎的底层原理

发布时间:2026/11/12 23:08:39

Apache Gluten架构全景图:Substrait如何桥接JVM与原生引擎的底层原理 Apache Gluten架构全景图Substrait如何桥接JVM与原生引擎的底层原理【免费下载链接】glutenGluten is a middle layer responsible for offloading JVM-based SQL engines execution to native engines.项目地址: https://gitcode.com/GitHub_Trending/glu/glutenApache Gluten是一个强大的中间层框架旨在将基于JVM的SQL引擎如Spark的执行流程卸载到原生引擎如ClickHouse、Velox从而显著提升大数据处理性能。其核心创新在于通过Substrait协议作为统一的执行计划表示层实现了JVM与原生引擎之间的高效通信与协作。本文将深入解析Gluten的架构设计重点探讨Substrait如何作为关键桥梁连接JVM生态与原生执行引擎以及这一技术路径带来的性能突破。为什么需要GlutenJVM与原生引擎的性能鸿沟在大数据处理领域JVM生态如Spark、Flink凭借其易用性和丰富的生态系统占据主导地位但在计算密集型场景下JVM的内存管理开销和垃圾回收机制往往成为性能瓶颈。原生引擎C/Rust实现则在计算效率和内存利用上具有天然优势但缺乏JVM生态的灵活性和易用性。Gluten的出现正是为了弥合这一鸿沟保留JVM生态优势继续使用Spark等熟悉的API和生态系统原生执行加速将核心计算逻辑卸载到ClickHouse/Velox等原生引擎零成本迁移用户无需修改现有代码即可享受性能提升图1Gluten执行流程示意图展示了数据从Parquet读取到聚合计算的全过程突出了Transformer和Columnar Shuffle等核心组件的作用Gluten核心架构三层协同设计Gluten采用清晰的分层架构确保各组件解耦且高效协作1. 执行计划转换层核心功能将Spark的逻辑计划转换为Substrait协议表示关键组件SubstraitContextgluten-substrait/src/main/scala/org/apache/gluten/substrait/SubstraitContext.scala负责管理转换过程中的上下文信息技术亮点通过RelBuildergluten-substrait/src/main/java/org/apache/gluten/substrait/rel/RelBuilder.java构建Substrait计划支持多种关系代数操作2. 原生执行引擎层多引擎支持可插拔设计目前支持ClickHouse和Velox后端ClickHouse集成通过CHBackendbackends-clickhouse/src/main/scala/org/apache/gluten/backendsapi/clickhouse/CHBackend.scala实现深度集成Velox集成通过VeloxBackendbackends-velox/src/main/scala/org/apache/gluten/backendsapi/velox/VeloxBackend.scala提供高性能内存计算3. 数据交互层列存优化采用Arrow内存格式实现零拷贝数据传输shuffle优化通过ColumnarShufflebackends-velox/src/main/scala/org/apache/gluten/execution/HashJoinExecTransformer.scala实现高效数据交换内存管理统一的内存池管理避免JVM与原生引擎间的内存浪费图2Gluten操作符层次结构展示了SubstraitTransformerSupport如何作为基础衍生出各种具体的执行节点转换器Substrait协议打破引擎壁垒的通用语言什么是SubstraitSubstrait是一个跨引擎的查询计划表示协议旨在解决不同SQL引擎间执行计划不兼容的问题。它定义了关系代数操作的标准化表示数据类型系统和函数签名序列化格式基于Protobuf在Gluten中Substrait扮演着翻译官的角色将Spark的逻辑计划转换为原生引擎可理解的执行计划。Substrait在Gluten中的实现路径Gluten通过以下关键组件实现Substrait的转换与执行计划转换SubstraitTransformergluten-substrait/src/main/scala/org/apache/gluten/execution/WholeStageTransformer.scala负责将Spark计划转换为Substrait计划ExpressionTransformergluten-substrait/src/main/scala/org/apache/gluten/expression/ExpressionTransformer.scala处理表达式级别的转换原生执行Velox后端通过SubstraitToVeloxPlanConvertercpp/velox/substrait/SubstraitToVeloxPlan.h将Substrait计划转换为Velox可执行计划ClickHouse后端通过CHExpressionTransformerbackends-clickhouse/src/main/scala/org/apache/gluten/expression/CHExpressionTransformer.scala实现表达式转换类型系统映射VeloxSubstraitSignaturecpp/velox/substrait/VeloxSubstraitSignature.h处理数据类型的映射ConverterUtilsgluten-substrait/src/main/scala/org/apache/gluten/expression/ConverterUtils.scala提供类型转换工具函数Substrait上下文管理SubstraitContext是Gluten中管理计划转换的核心类它维护了Spark操作符ID与Substrait关系ID的映射函数注册与解析信息类型转换上下文通过new SubstraitContext()创建上下文实例后即可开始计划转换流程val context new SubstraitContext() val transformContext transformer.doTransform(context)深入核心Substrait计划的生命周期一个Substrait计划在Gluten中的典型生命周期包括1. 计划生成Spark Catalyst优化器生成逻辑计划WholeStageTransformer将逻辑计划转换为Substrait计划关键代码gluten-substrait/src/main/scala/org/apache/gluten/execution/WholeStageTransformer.scala2. 计划序列化Substrait计划序列化为Protobuf格式通过JNI传递给原生引擎关键代码gluten-substrait/src/main/java/org/apache/gluten/substrait/plan/PlanBuilder.java3. 原生执行原生引擎解析Substrait计划生成物理执行计划并执行关键代码Veloxcpp/velox/substrait/SubstraitToVeloxPlan.cc4. 结果返回执行结果通过Arrow格式返回JVMSpark将Arrow格式转换为内部Row格式关键代码gluten-arrow/src/main/java/org/apache/gluten/vectorized/PlanEvaluatorJniWrapper.java图3Gluten ClickHouse后端架构展示了Spark通过Substrait计划与ClickHouse原生引擎的交互流程性能优化Substrait带来的技术红利1. 减少数据序列化开销采用Arrow内存格式实现JVM与原生引擎间的零拷贝数据传输避免传统Spark中Java对象与字节数组间的频繁转换2. 下推计算优化通过Substrait计划将过滤、投影等操作下推到原生引擎减少数据传输量充分利用原生引擎的向量化执行能力3. 统一函数库SubstraitParsercpp/velox/substrait/SubstraitParser.h实现函数签名的统一映射避免因函数实现差异导致的执行计划不兼容4. 执行计划缓存SubstraitContext支持计划缓存避免重复转换开销特别适合迭代式机器学习和交互式查询场景实际应用如何启用Gluten与Substrait启用Gluten非常简单只需在Spark配置中添加以下参数spark.sql.extensionsorg.apache.gluten.GlutenPlugin spark.gluten.sql.columnar.backendvelox # 或clickhouse spark.driver.extraClassPath/path/to/gluten-jars/* spark.executor.extraClassPath/path/to/gluten-jars/*Gluten会自动将支持的SQL算子转换为Substrait计划并交由原生引擎执行。用户无需修改现有SQL代码即可享受性能提升。未来展望Substrait生态的扩展Gluten团队正积极参与Substrait社区推动以下方向的发展扩展函数覆盖范围增加更多SQL函数的Substrait支持增强数据类型系统支持更丰富的复杂数据类型优化计划缓存机制进一步提升重复查询的性能多引擎协同执行支持同一查询中混合使用多种原生引擎随着Substrait协议的不断成熟Gluten有望成为连接JVM生态与原生计算的标准化桥梁为大数据处理带来更多性能突破。总结Apache Gluten通过Substrait协议实现了JVM SQL引擎与原生执行引擎的无缝集成打破了传统大数据处理中的性能瓶颈。其分层架构设计确保了灵活性和可扩展性而Substrait作为通用执行计划语言则为跨引擎协作提供了统一标准。无论是ClickHouse还是Velox后端Gluten都能充分发挥原生执行的性能优势同时保留Spark等JVM引擎的易用性。对于追求极致性能的大数据应用而言Gluten无疑是一个值得尝试的革命性框架。【免费下载链接】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),仅供参考
延伸阅读

更多相关文章

2026/11/12 23:08:39

IngressMonitorController故障排查指南:常见问题与解决方案

IngressMonitorController故障排查指南:常见问题与解决方案 【免费下载链接】IngressMonitorController A Kubernetes controller to watch ingresses and create liveness alerts for your apps/microservices in UptimeRobot, StatusCake, Pingdom, etc. – [✩St…

2026/11/12 22:53:21

XZ1820A工作电压6-90V 输出电流2A开关型降压恒压驱动器芯片

概述这是一款单片集成可设定输出电流的开关型降压恒压驱动器,可工作在宽输入电压范围具有优良的负载和线性调整度。安全保护机制包括每周期的峰值限流、软启动、过压保护和温度保护,带短路保护。保护点150度的温度过热保护,较高占空比大于92%。压差最小2…

2026/11/7 23:54:11

Unity URP能量罩Shader开发:从BRP迁移到性能优化全解析

1. 项目概述:从BRP到URP的能量罩迁移与优化最近在重构一个老项目,需要把一套在Unity内置渲染管线(Built-in Render Pipeline, 简称BRP)下运行良好的能量罩特效,完整地迁移到通用渲染管线(Univer…

2026/11/12 23:05:45

考电工证菏泽哪里报名实操考试考什么

工地太忙根本没时间复习考试,考电工证菏泽在哪考 工地太忙根本没时间复习考试,这几乎是每个在工地干活的电工、焊工、高处作业人员的真实写照。尤其是像你这样在菏泽本地做劳务班组的负责人,不仅要带人,还要处理各种手续,报考电工证的时间、流程、实操考…

2026/11/12 23:05:45

老梁谈特种工退休继续教育学时要求值不值得考

老梁谈特种工退休继续教育学时要求值不值得考 之前考的证在外省能不能转过来?这是很多特种作业人员最关心的问题之一。尤其是那些在外地工作多年、证件在老家的师傅们,一到退休年龄就犯愁,证能不能用、能不能转、值不值得考这些问题,直接关系到他们未来几…

2026/11/12 23:05:45

玛纳斯县电工证怎么考?真实经历告诉你别交了冤枉钱

玛纳斯县电工证怎么考?真实经历告诉你别交了冤枉钱 怕考不过白交培训费?这是几乎所有想考电工证的人心头的疙瘩。我自己就踩过坑,交了培训费,结果考试没过,差点血本无归。但后来我找到了正确的报名渠道,顺利拿证,现在在玛纳斯县从事电力安装工作,月薪…

2026/11/12 23:05:45

培训电工证学校怎么考?考前押题帮你省心过关

培训电工证学校怎么考?考前押题帮你省心过关 证书过期了不知道怎么复审延期?别慌,今天从头到尾给你说清楚, 培训电工证学校 怎么选、怎么考、怎么复审,还有 考前押题…

2026/11/12 23:05:45

郴州市在哪考电工证保姆级教程:考前必看的全流程攻略

郴州市在哪考电工证保姆级教程:考前必看的全流程攻略 你是不是也这样,手里拿着简历,却因为没有特种作业操作证而被拒绝?别急,今天这篇【郴州市在哪考电工证保姆级教程】,就是为像你这样的求职者量身打造的,帮你一次通关,顺利上岗。…

2026/11/12 23:00:44

龙华区低压电工作业证到期换证流程保姆级教程

龙华区低压电工作业证到期换证流程保姆级教程 证书过期了不知道怎么复审延期?别急,今天这篇保姆级教程专为像你这样在龙华区从事低压电工作业的小伙伴准备。如果你的低压电工作业证快到期了,或者已经过期了,别担心,按流程走,照样能顺利换证,继续合法执…

2026/11/12 20:35:13

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/12 0:04:01

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘 工地太忙根本没时间复习考试?你不是一个人。作为一名在南阳卧龙区干了七八年市政公用工程的电工,我深知这个问题的现实性。电工证不仅是工作的“入场券”,更是职业发展的“通行证”,但备考过程…

2026/11/12 0:04:01

双流电工证考别怕挂科!郑州报考避坑指南全攻略

双流电工证考别怕挂科!郑州报考避坑指南全攻略 实操考试心里没底怕挂科?双流电工证考在郑州报名,很多人因为不了解流程、准备不充分,白白浪费时间和金钱。作为三门峡应届工程类毕业生,我也曾经历过这样的焦虑。今天就从零开始,手把手教你如何避开郑州报…

2026/11/12 0:04:01

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少 之前考的证在外省能不能转过来?这个问题确实让不少准备换城市工作的朋友犯了难,尤其像电工证这种实操性很强的证书,很多人担心跨省后证书能不能继续用。其实,只要符合相关流程,是可以顺利转…

2026/11/12 22:10:13

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/12 9:51:42

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑