【Auron】-- 让 Spark SQL/DataFrame 跑得更快

目录

[一、Auron 是什么?](#一、Auron 是什么?)

核心要点

[二、为什么需要 Auron?](#二、为什么需要 Auron?)

[1. 性能与成本](#1. 性能与成本)

[2. 技术原因](#2. 技术原因)

[3. 业务价值](#3. 业务价值)

[三、怎么使用 Auron?](#三、怎么使用 Auron?)

[3.1 环境准备](#3.1 环境准备)

[3.2 从源码构建](#3.2 从源码构建)

[3.3 在 Spark 中启用 Auron](#3.3 在 Spark 中启用 Auron)

[3.4 与 Remote Shuffle Service 集成(可选)](#3.4 与 Remote Shuffle Service 集成(可选))

[3.5 常用配置一览](#3.5 常用配置一览)

[四、什么时候、什么场景下用 Auron?](#四、什么时候、什么场景下用 Auron?)

适合的场景

需要谨慎或配合回退的场景

何时考虑引入

[五、谁适合用 Auron?](#五、谁适合用 Auron?)

六、拓展

[6.1 其他注意事项](#6.1 其他注意事项)

[6.2 周边生态](#6.2 周边生态)

[6.3 Auron 的社区现状](#6.3 Auron 的社区现状)

参考链接

本文基于 Apache Auron 官网GitHub 仓库 文档整理,面向大数据引擎加速场景的实践者与决策者。


一、Auron 是什么?

Apache Auron (孵化中)是一款面向大数据引擎的原生向量化执行加速器 ,主要服务于 Apache SparkApache Flink 等分布式计算框架,通过将部分或全部物理计划下沉到 Rust + Apache DataFusion 实现的原生执行层,显著提升 SQL/DataFrame 查询的处理速度。

核心要点

  • 定位:Spark/Flink 的"加速插件",而非替代引擎;与现有 Spark 生态兼容,通过扩展与 Shuffle Manager 集成。

  • 技术栈 :底层由 Rust 编写,基于 Apache DataFusionApache Arrow 列式格式,实现向量化、SIMD 友好的批量计算。

  • 工作方式:接收分布式框架已优化好的物理计划,将其映射为 DataFusion 的执行计划,在 JVM 外进行原生计算,从而减少 JVM 开销、提升 CPU 利用率与稳定性。

简单说:Auron = Spark/Flink 的"原生执行加速层",在保持原有 API 与生态的前提下,让作业跑得更快、更省资源。

举例 :用户提交一条 SELECT ... FROM fact JOIN dim ON ... WHERE ... GROUP BY ...,Spark 先生成物理计划(含 Scan、Filter、Join、Aggregate 等节点);Auron 将这些节点映射为 DataFusion 的执行计划,在 JVM 外的 Rust 进程中以 Arrow 列式批量执行,结果再回传给 Spark 做后续调度与输出。业务侧仍用 spark-sql、DataFrame、Thrift 等原有方式,无感知加速。


二、为什么需要 Auron?

1. 性能与成本

  • TPC-DS/TPC-H 基准 :在同等规模下,Auron 相比 Spark 3.5 可实现约 2x 加速 ,并节省约 50% 的集群资源Benchmark 详情)。

  • 生产表现:在真实生产环境中(包括 EB 级数据)验证过,在复杂场景下仍有明显性能提升。

举例:官方在 TPC-DS 1TB 数据集上的测试(Spark 3.5.6 vs Auron 6.0.0-preview)中,全量 99 条查询整体耗时显著下降;若原集群需 100 台 8c16g Executor 跑约 2 小时,启用 Auron 后相近延迟下约 50 台即可,或同规模下耗时约减半,直接降低算力与调度成本。

2. 技术原因

维度 说明
摆脱 JVM 瓶颈 关键路径用 Rust 执行,减少 GC、序列化/反序列化与 JNI 开销。
向量化 + SIMD 基于 Arrow 列式内存与批量处理,更好利用 CPU SIMD,提高缓存与指令效率。
可插拔 通过 Spark Extension + 专用 Shuffle Manager 接入,无需重写业务代码。
生产级优化 多级内存管理、紧凑 Shuffle 格式、自适应执行与 UDAF/复杂表达式回退等,兼顾性能与稳定性。

3. 业务价值

  • 降本:同样吞吐下可减少 Executor 数量或规格,降低算力与调度成本。

  • 提效:报表、即席查询、批处理作业延迟降低,SLA 更易满足。

  • 兼容:继续使用现有 Spark SQL、DataFrame、Thrift Server、数据源与调度体系,迁移风险可控。

举例:某数仓日批任务从 50 张表中做多路 Join 与聚合,原 Spark 配置为 200 Executor、每 Executor 16g 内存,单次跑约 45 分钟;启用 Auron 并适当调低 Executor 数量与内存后,相同 SQL 与数据量下约 25 分钟完成,资源占用约降 40%,且无需改 SQL 或调度脚本。


三、怎么使用 Auron?

3.1 环境准备

  • Rust :Auron 原生库需 Rust(nightly ),建议用 rustup 安装。

  • JDK :项目在 JDK 8 / 11 / 17 上经过测试,需正确设置 JAVA_HOME

  • Spark:与 Spark 主线版本适配,具体以官方文档和 Release 说明为准。

举例 :本地开发机可先安装 Rust nightly(rustup default nightly)和 JDK 11,并设置 JAVA_HOME;若使用 Docker 构建,则无需在本机安装 Rust,直接执行 ./auron-build.sh 并选择 Docker 模式即可。

3.2 从源码构建

使用项目提供的统一脚本 auron-build.sh,支持本地构建与 Docker 构建:

复制代码
git clone https://github.com/apache/auron.git
cd auron
./auron-build.sh --help   # 查看构建选项与支持的 Spark/OS 等
./auron-build.sh          # 按需选择本地或 Docker 构建

构建完成后:

  • 本地构建 :产物在 target/ 目录。

  • Docker 构建 :产物在 target-docker/ 目录。

得到的是包含依赖的 fat JAR ,需放入 Spark 的 classpath(通常为 spark-xx/jars/)。

举例 :构建完成后可在 target/ 下找到类似 auron-spark-extension-spark_3.x-xxx.jar 的包,将其拷贝到 $SPARK_HOME/jars/,与 Spark 自带的 jar 一起被加载。

3.3 在 Spark 中启用 Auron

  1. 部署 JAR 将 Auron 的 fat JAR 放到 Spark 的 classpath(例如 $SPARK_HOME/jars/)。

  2. 修改 Spark 配置$SPARK_HOME/conf/spark-defaults.conf 中增加或确认如下配置:

复制代码
# 启用 Auron
spark.auron.enable true
spark.sql.extensions org.apache.spark.sql.auron.AuronSparkSessionExtension
spark.shuffle.manager org.apache.spark.sql.execution.auron.shuffle.AuronShuffleManager
spark.memory.offHeap.enabled false
​
# 建议的 Executor 内存配置(可按集群实际调整)
spark.executor.memory 4g
spark.executor.memoryOverhead 4096
  1. 提交作业 使用 spark-sqlspark-submit、Thrift Server 等原有方式即可,无需改 SQL 或应用代码:
复制代码
spark-sql -f tpcds/q01.sql

更多使用方式举例

  • spark-submit 跑应用 :与未启用 Auron 时一致,只需保证上述配置已写入 spark-defaults.conf 或通过 --conf 传入:

    复制代码
    spark-submit --class com.example.MyApp \
      --master yarn --deploy-mode cluster \
      /path/to/your-app.jar
  • PySpark / DataFrame :无需改代码,Session 自动带上 Auron 扩展后,spark.sql("SELECT ...")df.filter(...).join(...).groupBy(...) 中符合条件的算子会走 Auron 原生执行。

    复制代码
    from pyspark.sql import SparkSession
    spark = SparkSession.builder.getOrCreate()  # 已含 auron 配置时自动生效
    df = spark.read.parquet("/path/to/data")
    df.filter("date >= '2025-01-01'").groupBy("region").sum("amount").show()

3.4 与 Remote Shuffle Service 集成(可选)

Auron 支持与 Apache CelebornApache Uniffle 等 RSS 集成,以提升 Shuffle 性能与可扩展性。 示例(Celeborn):

复制代码
spark.shuffle.manager org.apache.spark.sql.execution.auron.shuffle.celeborn.AuronCelebornShuffleManager
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.celeborn.master.endpoints <master_host>:9097
spark.celeborn.client.spark.shuffle.writer hash
spark.sql.adaptive.localShuffleReader.enabled false

需将对应 RSS 客户端 JAR 加入 Spark 应用 classpath,并将 endpoint、队列等改为实际环境配置。 Uniffle 的配置方式见 Getting Started - RSS

3.5 常用配置一览

类别 配置示例 说明
开关 spark.auron.enable 总开关,设为 true 启用 Auron。
内存 spark.auron.memoryFractionspark.auron.process.vmrss.memoryFraction 控制原生侧内存占比与进程 VMRSS。
回退 spark.auron.udafFallback.enablespark.auron.smjfallback.enable UDAF/复杂聚合、大表 Join 回退到 Spark 实现,保证稳定。
算子 spark.auron.enable.scanspark.auron.enable.aggr 可按需关闭某个算子的 Auron 实现,用于排障或 A/B 测试。

更多参数见 Configuration

配置举例 :某作业因自定义 UDAF 导致部分阶段回退,希望先保留正确性再逐步优化,可显式开启 UDAF 回退并观察:spark.auron.udafFallback.enable true(默认即为 true)。若做 TPC-DS 类压测并希望尽量用 Hash Join,可设 spark.auron.forceShuffledHashJoin truespark.auron.smjfallback.enable true,并调大 spark.auron.smjfallback.mem.threshold(如 512000000),在内存允许时优先走 ShuffledHashJoin。


四、什么时候、什么场景下用 Auron?

适合的场景

  • 大规模批处理 / 数仓 ETL 多表 Join、大聚合、复杂过滤,且对延迟和资源成本敏感。

  • 交互式 / 即席查询 需要更快响应的 Ad-hoc SQL、报表、看板查询。

  • TPC-DS/TPC-H 类负载 官方已完整跑通并优化,此类基准与生产 SQL 接近时收益明显。

  • 已有 Spark 技术栈 不想替换引擎,只希望通过"加一层加速"提升性能、降低资源。

  • 数据湖 + Spark 使用 Hudi、Paimon 等时,Auron 支持对应 Scan(如 PaimonScanExec),可加速湖上查询。

  • Parquet/ORC 为主 原生支持 Parquet/ORC 的向量化读取与下推,列存场景收益大。

场景举例

场景 典型 SQL/负载 预期收益
日批汇总 多表 Join + GROUP BY + SUM/COUNT,数据量 1TB+ 同资源下耗时可明显缩短,或同 SLA 下减少 Executor 数量
即席分析 SELECT ... FROM parquet 表 WHERE ... LIMIT 1000 首字节延迟与端到端耗时下降,适合 BI 工具与交互查询
数据湖查询 读 Hudi/Paimon 表 + 过滤 + 聚合 PaimonScanExec 等走 Auron 原生 Scan,减少 JVM 与序列化开销
TPC-DS 类基准 99 条标准查询、1TB Parquet 官方数据:整体约 2x 加速、约 50% 资源节省

需要谨慎或配合回退的场景

  • 大量自定义 UDF/UDTF 或复杂 UDAF 部分会回退到 JVM 执行,仍可运行,但需关注回退比例与热点。

  • 对 Spark 内部行为强依赖的调优 例如依赖特定物理计划形状、某些 Spark 内部 metric 的,需在启用 Auron 后做一次验证。

  • 尚未在生产验证的 Spark 小版本 建议先在测试/预发用同版本 + Auron 做回归与性能对比。

举例 :若任务里大量使用自定义 collect_list 或复杂 UDAF(如百分位、中位数),Auron 会通过 spark.auron.udafFallback.enable 将对应聚合回退到 Spark 执行,结果正确但该阶段无加速;可结合 Spark UI 中 Auron 的 metric 查看回退比例,再决定是否优化 UDAF 或接受部分回退。

何时考虑引入

  • 当前集群 CPU/内存利用率高、作业排队时间长,希望"同资源更快"或"同延迟更省资源"。

  • 计划做 Spark 版本升级,可把"启用 Auron"作为性能优化项一起评估。

  • 新项目以 Spark SQL 为主、存储为 Parquet/ORC/数据湖,希望从起步就获得更好性能。

举例:当前 100 台 Executor 的离线队列平均利用率 70%,关键日批需 1.5 小时才能跑完,希望在不扩容的前提下把时间压到 1 小时内------可先在测试环境用相同数据与 SQL 开启 Auron 对比耗时与资源,再在离线队列灰度;若结果符合预期,再考虑在即席队列也默认开启。


五、谁适合用 Auron?

角色 关注点 建议
平台 / 基础架构 集群资源利用率、成本、稳定性 在测试集群先跑 TPC-DS 或真实作业,对比开启/关闭 Auron 的资源和延迟,再制定灰度策略。
数据开发 / 数仓 SQL 执行时间、ETL 窗口、即席查询体验 无需改 SQL,启用后观察历史慢查询与关键作业的耗时与资源;注意 UDAF/复杂表达式是否有回退。
引擎 / 大数据研发 内核性能、JVM 与原生结合、可扩展性 阅读 DataFusion/Arrow 与 Auron 的 plan 映射、算子支持与配置项,便于调优与排障。
技术决策者 投入产出比、技术路线、风险 Auron 为 Apache 孵化项目,已在生产验证;适合作为"Spark 加速选项"做 POC 与试点,再逐步推广。

角色举例:某公司数据平台团队负责维护 500+ 节点的 Spark 集群,日批与即席混跑,成本压力大。平台工程师在测试集群用 TPC-DS 1TB 对比开启/关闭 Auron,得到约 1.8x 加速与约 45% 资源节省后,在非核心业务队列先灰度 20% 流量,观察一周无异常再扩大;数据开发同学无需改 SQL,仅被告知"集群已开启加速";技术负责人据此评估是否在全集群默认开启 Auron。


六、拓展

6.1 其他注意事项

  • 内存配置 启用 Auron 时建议 spark.memory.offHeap.enabled false;Executor 的 memorymemoryOverhead 需根据负载调整,文档中有基准测试的推荐范围(如 8g + 16384MB overhead),生产可在此基础上微调。

  • 故障与回退 未实现的算子/表达式会自动回退到 Spark,一般不影响正确性;若遇异常,可结合 spark.auron.enable.xxx 关闭单个算子或查看 Auron/Spark UI 的 metric 定位是否在原生侧。

  • 版本匹配 构建时需选择与当前 Spark 主版本匹配的 Auron 分支/标签,并确保 JDK、Rust 版本符合 README / 官网 要求。

  • 孵化状态 Auron 处于 Apache 孵化阶段,API 与配置可能随版本有少量变动,升级时建议查阅 Release Notes 与配置文档。

举例 :若发现大表 Join 时偶发 OOM,可开启 spark.auron.smjfallback.enable true 并调大 spark.auron.smjfallback.mem.threshold,让 Hash Join 在内存超阈值时回退到 SortMergeJoin,避免单任务拖垮 Executor;或针对某类作业关闭 Parquet Scan 的 Auron 实现做 A/B 对比:spark.auron.enable.scan.parquet false

6.2 周边生态

类别 项目 / 能力 说明
执行与格式 Apache DataFusion、Apache Arrow 原生执行引擎与列存内存格式,Auron 的核心依赖。
存储 HDFS、S3、Parquet、ORC 支持常见对象存储与列式格式;Parquet/ORC 有专门优化与可选 Bloom Filter、Page 过滤等。
数据湖 Apache Hudi、Apache Paimon 支持对应 Scan 算子,可加速湖上分析查询。
Shuffle Apache Celeborn、Apache Uniffle 可作为 Remote Shuffle Service,与 Auron Shuffle Manager 配合使用。
Spark Spark 3.x 主线 通过 Extension + Shuffle Manager 集成,兼容现有 Spark 生态。
Flink auron-flink-extension 仓库中有 Flink 扩展模块,可关注 Flink 场景的文档与发布说明。

生态集成举例 :读 Paimon 表时,在 Spark 中启用 Auron 后,spark.read.format("paimon").load("path") 对应的 PaimonScanExec 可转为 Auron 原生 Scan,与后续 Filter/Project/Join 一起在原生侧执行;若集群已部署 Celeborn,将 spark.shuffle.manager 设为 AuronCelebornShuffleManager 并配置 master endpoint,Shuffle 数据由 Celeborn 托管,可减轻 Executor 磁盘与网络压力,并提升稳定性。

6.3 Auron 的社区现状

  • 托管与许可:Apache 软件基金会孵化项目,Apache 2.0 许可证;开发与沟通遵循 ASF 流程。

  • 协作方式

  • 采用情况:部分合作方已在生产环境使用;更多团队在调研与评估中;项目提供基准测试方法与结果,便于社区复现与对比。

  • 参与贡献 :欢迎贡献代码、文档、用例与反馈,可参考仓库中的 CONTRIBUTING.md

举例 :若在使用中遇到某条 SQL 在开启 Auron 后结果异常或性能回退,可在 GitHub apache/auron Issues 提交 Issue,附上 Spark/Auron 版本、最小复现 SQL 与配置;或先订阅 dev@auron.apache.org 邮件列表,在列表中描述场景并获取维护者与社区的反馈。


参考链接


文档基于公开文档整理,配置与版本以官方最新发布为准。

相关推荐
JuneXcy2 小时前
第5讲 MySql数据操纵语句--复杂查询
数据库·sql·mysql
GEO_Huang2 小时前
定义未来办公:数谷AgentOffice如何实现规模化提效
大数据·运维·人工智能·自动化·aigc
升职佳兴2 小时前
Hadoop 三节点集群环境变量工程化:从 /etc/profile 迁移到 /etc/profile.d/ 全过程记录
大数据·hadoop·分布式
Htyyy22 小时前
深度测评2026年三亚海鲜美食推荐榜单
大数据·美食
科技快报2 小时前
华为发布AI数据平台,重塑数据基座,加速企业AI应用落地
大数据·人工智能·华为
珠海西格2 小时前
红区蔓延的底层逻辑:分布式光伏爆发与配电网短板的“时空错配”
大数据·服务器·分布式·安全·架构
我爱学习好爱好爱2 小时前
Elasticsearch 7.17.10 双节点集群部署(二):安装 elasticsearch-head 插件实现可视化
大数据·linux·elasticsearch
Elastic 中国社区官方博客3 小时前
SearchClaw:将 Elasticsearch 通过可组合技能引入 OpenClaw
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
weixin_505154464 小时前
博维数孪携手微软,打造智能电网数字化手册新标杆
大数据·人工智能·智慧城市·数字孪生·产品交互展示