目录
[一、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 Spark 与 Apache Flink 等分布式计算框架,通过将部分或全部物理计划下沉到 Rust + Apache DataFusion 实现的原生执行层,显著提升 SQL/DataFrame 查询的处理速度。
核心要点
-
定位:Spark/Flink 的"加速插件",而非替代引擎;与现有 Spark 生态兼容,通过扩展与 Shuffle Manager 集成。
-
技术栈 :底层由 Rust 编写,基于 Apache DataFusion 与 Apache 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
-
部署 JAR 将 Auron 的 fat JAR 放到 Spark 的 classpath(例如
$SPARK_HOME/jars/)。 -
修改 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
- 提交作业 使用
spark-sql、spark-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 Celeborn 、Apache 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.memoryFraction、spark.auron.process.vmrss.memoryFraction |
控制原生侧内存占比与进程 VMRSS。 |
| 回退 | spark.auron.udafFallback.enable、spark.auron.smjfallback.enable |
UDAF/复杂聚合、大表 Join 回退到 Spark 实现,保证稳定。 |
| 算子 | spark.auron.enable.scan、spark.auron.enable.aggr 等 |
可按需关闭某个算子的 Auron 实现,用于排障或 A/B 测试。 |
更多参数见 Configuration。
配置举例 :某作业因自定义 UDAF 导致部分阶段回退,希望先保留正确性再逐步优化,可显式开启 UDAF 回退并观察:spark.auron.udafFallback.enable true(默认即为 true)。若做 TPC-DS 类压测并希望尽量用 Hash Join,可设 spark.auron.forceShuffledHashJoin true 和 spark.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 的memory与memoryOverhead需根据负载调整,文档中有基准测试的推荐范围(如 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 流程。
-
协作方式:
-
邮件列表:dev@auron.apache.org(订阅 / 退订)。
-
代码与 Issue:GitHub apache/auron。
-
-
采用情况:部分合作方已在生产环境使用;更多团队在调研与评估中;项目提供基准测试方法与结果,便于社区复现与对比。
-
参与贡献 :欢迎贡献代码、文档、用例与反馈,可参考仓库中的 CONTRIBUTING.md。
举例 :若在使用中遇到某条 SQL 在开启 Auron 后结果异常或性能回退,可在 GitHub apache/auron Issues 提交 Issue,附上 Spark/Auron 版本、最小复现 SQL 与配置;或先订阅 dev@auron.apache.org 邮件列表,在列表中描述场景并获取维护者与社区的反馈。
参考链接
文档基于公开文档整理,配置与版本以官方最新发布为准。