首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spark Project Tungsten 读书笔记:三大核心优化直逼裸金属性能

     編輯:Java 綜合教學

Spark Project Tungsten 读书笔记

Tungsten 计划旨在「Bringing Apache Spark closer to Bare Metal」,通过内存管理、缓存感知计算、代码生成三大支柱,消除 JVM 开销,充分榨取 CPU、内存、IO、网络硬件性能。

三大核心动作

支柱核心技术性能提升适用场景
1. Memory Management & Binary Processingsun.misc.Unsafe 管理堆内/堆外内存,绕过 JVM GC聚合吞吐 100 万行/秒/线程,HashMap 性能 2 倍于 java.util.HashMap大规模聚合、Join、Shuffle
2. Cache-aware Computation算法与数据结构适配 CPU L1/L2/L3 缓存层级排序性能 3 倍提升Sort、Sort-Merge Join、高基数聚合
3. Code Generation从 Record-at-a-time → Vectorized 表达式求值,利用现代编译器优化Shuffle 写入 800 万行/秒,较 Kryo 提升 2 倍表达式计算、投影、过滤、Shuffle 序列化

关键技术细节

Unsafe 内存管理

  • 显式分配/释放内存(allocateMemory/freeMemory),避免 GC 停顿
  • 以字节数组形式存储数据,按列式/行式布局,支持零拷贝序列化
  • Spark 1.4/1.5 引入 unsafe-heap 与 unsafe-offheap 两种模式

缓存感知排序

  • 利用 CPU 预取、缓存行对齐、分支预测友好的数据布局
  • 具体如何提升命中率原文未展开,后续需阅读 UnsafeExternalSorter 源码

代码生成:向量化执行

  • 传统 Volcano 模型:逐行迭代器调用,虚函数开销大、分支预测失效
  • Tungsten:生成处理整列数据的紧凑循环,利用 SIMD 指令、消除虚调用
  • 表达式求值直接内联到循环体,JIT 编译器可深度优化

参考资料

后续深入方向

  1. 阅读 org.apache.spark.sql.execution.UnsafeExternalSorter 理解缓存感知排序
  2. 分析 org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator 代码生成逻辑
  3. 对比 Tungsten 与 Spark 3.0+ Adaptive Query Execution 的协同关系
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved