Apache Gluten核心组件解析:从执行计划到数据处理的全链路架构
Apache Gluten核心组件解析从执行计划到数据处理的全链路架构【免费下载链接】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从而显著提升数据处理性能。通过引入列存优化、向量化执行和原生代码加速Gluten有效解决了JVM在大数据场景下的内存开销和GC瓶颈问题为企业级数据分析提供了高性能解决方案。一、Gluten整体架构连接JVM与原生引擎的桥梁Gluten的核心价值在于构建了JVM SQL引擎与原生执行引擎之间的高效通信层。其架构设计遵循分层解耦原则主要包含三大逻辑模块执行计划转换层、列存数据管理层和原生执行适配层。图1Gluten架构总览展示了其作为Spark与多种原生引擎之间中间层的核心定位从技术实现来看Gluten通过Spark Plugin机制拦截SQL执行流程将Spark的逻辑计划转换为Substrait标准执行计划再分发到ClickHouse或Velox等原生引擎执行。这种设计带来两大优势跨引擎兼容性通过Substrait标准化接口支持多原生引擎接入零侵入集成无需修改Spark源码即可实现性能加速二、核心组件详解从计划到执行的全链路解析2.1 Substrait计划转换器SQL逻辑到原生执行的翻译官Substrait计划转换器是Gluten的大脑负责将Spark的逻辑执行计划转换为原生引擎可理解的Substrait计划。该组件位于gluten-substrait/src/main/scala/io/glutenproject/substrait目录下通过实现SubstraitTransformer接口完成计划转换。图2Gluten执行计划转换与数据处理流程转换器的核心工作流程包括计划验证检查SQL计划是否支持原生执行如SubstraitTransformer.validate()算子映射将Spark算子转换为Substrait算子如HashJoinTransformer.doTransform()类型转换处理Spark与原生引擎间的数据类型映射如TypeUtils工具类关键实现类SubstraitTransformerExec基础转换执行器HashJoinTransformer哈希连接算子转换器FileSourceScanTransformer文件扫描算子转换器2.2 列存数据管理层高效内存计算的基石Gluten采用Arrow列存格式作为JVM与原生引擎间的数据交换标准通过gluten-arrow模块实现高效数据传输。该层主要解决两大问题内存高效表示使用Arrow ColumnarBatch替代Spark Row格式减少内存占用零拷贝传输通过JNI直接共享内存避免数据序列化开销核心实现位于gluten-arrow/src/main/java/io/glutenproject/arrow目录提供了ArrowColumnVector列存数据容器ArrowMemoryPool内存管理池ColumnarBatchSerializer批处理序列化工具2.3 原生执行适配层多引擎统一接入的门户Gluten设计了灵活的原生引擎适配框架目前已支持ClickHouse和Velox两种后端引擎分别通过backends-clickhouse和backends-velox模块实现。以ClickHouse后端为例其架构如下图3Gluten ClickHouse后端分布式执行架构该适配层的核心组件包括执行器工厂ClickHouseBackend创建原生执行器JNI桥接libch.so动态库实现Java与C通信结果迭代器ResultIterator处理原生执行结果回调Velox后端则通过VeloxBackend和VeloxRuntime实现类似功能特别优化了向量化执行和内存管理。三、算子执行框架高性能计算的引擎Gluten通过gluten-core/src/main/scala/io/glutenproject/execution模块实现了一套完整的算子执行框架支持将Spark算子下推到原生引擎执行。图4Gluten算子执行框架类层次结构该框架的核心设计特点基于接口抽象TransformSupport定义算子转换标准接口分层实现基础算子如Project、Filter与复杂算子如Join、Aggregate分层实现条件验证每个算子转换器通过validate()方法检查是否支持原生执行常用算子转换器HashJoinTransformer支持Broadcast Hash Join和Shuffle Hash JoinAggregateTransformer支持预聚合和完全聚合两种模式SortTransformer利用原生引擎高效排序算法四、数据 shuffle 优化突破分布式计算瓶颈Gluten通过gluten-core/src/main/scala/io/glutenproject/shuffle模块实现了列存格式的shuffle优化主要创新点包括图5Gluten原生shuffle执行流程列存shuffle使用Arrow格式进行shuffle数据传输减少序列化开销分区优化HashPartitioner和RoundRobinPartitioner的原生实现** spilling 机制**当内存不足时通过Spill类实现磁盘溢出关键配置参数spark.gluten.shuffle.modeCOLUMNAR # 启用列存shuffle spark.gluten.shuffle.compresstrue # 启用shuffle压缩五、快速开始体验Gluten高性能计算要在Spark中使用Gluten只需通过以下步骤集成克隆仓库git clone https://gitcode.com/GitHub_Trending/glu/gluten构建项目cd gluten mvn clean package -DskipTests配置Sparkspark-submit \ --conf spark.pluginsio.glutenproject.GlutenPlugin \ --conf spark.gluten.sql.columnar.backendvelox \ your_application.jar详细配置指南可参考官方文档docs/get-started/Velox.md六、总结与展望Gluten通过创新的中间层设计成功将JVM SQL引擎的执行压力卸载到原生引擎在保持兼容性的同时实现了性能飞跃。其核心价值体现在架构创新Substrait标准化计划转换实现多引擎适配性能优化列存数据格式向量化执行大幅提升计算效率生态兼容无缝集成Spark生态支持Delta、Iceberg等数据源未来Gluten将继续优化算子支持范围增强GPU加速能力并扩展更多原生执行引擎为大数据处理提供更高效的计算平台。想了解更多技术细节可查阅项目源码或参与社区讨论核心源码gluten-core/src/main/scala/io/glutenproject开发者文档docs/developers/HowTo.md性能测试报告tools/workload/benchmark_velox【免费下载链接】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),仅供参考