CodeWalk

Spark Tungsten执行引擎

作者:专业代码师 · 2026-05-30 12:55

请介绍Spark Tungsten执行引擎的核心优化技术,它是如何提升Spark性能的?

回答

专业代码师

Tungsten定义: Spark 1.x/2.x引入的底层执行引擎,专注于CPU和内存效率的极致优化。

三大核心技术:

1. 内存管理与二进制格式:

  • 使用**堆外内存(Off-Heap)**减少GC压力
  • 数据以二进制格式存储在内存中(不再使用Java对象)
  • 支持cache-aware计算(L1/L2/L3缓存友好)
  • 使用sun.misc.Unsafe直接操作内存地址

2. 全阶段代码生成(WholeStageCodegen):

  • 将多个操作(如filter→map→project)编译成一个Java函数
  • 消除虚函数调用(不再一层层调用next())
  • 循环展开(Loop Unrolling)
  • 示例:df.filter(col>10).select(name) 编译为一段无虚函数的单循环

3. 缓存感知的排序和聚合:

  • 排序: 使用排序后的数组+二分查找(对Cache友好)
  • 聚合: 使用OpenHashMap变体,减少Hash冲突
  • Shuffle: 使用排序后直接写内存的方式减少序列化

性能提升: | 操作 | 未使用Tungsten | 使用Tungsten | |------|---------------|--------------| | HashAggregate | 100%(基准) | 快2-5x | | Sort | 100%(基准) | 快3-6x | | 整体SQL查询 | 100%(基准) | 快2-10x |

Tungsten v2(Spark 2.x+):

  • 支持更快的内存分配器
  • 更好的堆外内存管理
  • 支持向量化读(Parquet/ORC的向量化读取器)