Spark Tungsten

  • 数据结构
    • Unsafe Row
    • 内存页管理
  • 全阶段代码生成
    • 火山迭代模型
    • WSCG
      • 运行时动态生成

Tungsten (钨丝计划) : 围绕内核引擎的改进:

  • 数据结构设计
  • 全阶段代码生成(WSCG,Whole Stage Code Generation)

数据结构

Tungsten 在数据结构的改进 :

  • 紧凑的二进制格式 Unsafe Row
  • 内存页管理

Unsafe Row

Unsafe Row 是一种字节数组,所有字段按照 Schema 的顺序安放在数组中

  • 定长字段值 , 插到字节中
  • 变长字段先在 Schema 对应位置插入偏移地址,再把字段长度和字段值存储后面
  • 节数组的存储能消除存储开销,只用一个数组对象就能封装一条数据,降低 GC 压力

用 JVM 传统的对象存储 :

  • GenericMutableRow 封装一条数据,Array 用于存储实际的数据值
  • Array 中每个元素都是一个对象,如 : 整型 BoxedInteger、字符串 String
  • 在 JVM 堆内内存中,对象数越多 , 垃圾回收效率越低

内存页管理

Tungsten 地址 : 统一 128 位内存地址 , 为了统一管理 Off Heap 和 On Heap 内存空间

  • 前 64 位 : Java Object
  • 后 64 位 : 偏移地址 Offset
  • 128 位的 Tungsten 地址,Off Heap/OnHeap 内存在寻址方式上不一样

On Heap 的 Tungsten 地址:

  • 前 64 位存储 : JVM 堆内对象的引用或指针
  • 后 64 位 Offset 存储 : 数据在该对象内的偏移地址

Off Heap 的 Tungsten 地址:

  • 前 64 位存储 null 值 : 通过 Java Unsafe API 直接管理操作系统内存,没有内存对象
  • 后 64 位 : 直接寻址操作系统的内存空间

堆内外的寻址方式 :

  • Tungsten 用页表(Page Table)的数据结构,记录从 Object 引用到 JVM 对象地址的映射
  • 页表中记录的一个个内存页(Memory Page),内存页是一个 JVM 对象

Java 中 HashMap :

  • HashMap :用数组 + 链表来实现 ,数组元素存储 Hash Code、链表头
  • 链表节点存储 3 个元素:Key 引用、Value 引用、下一个元素的地址
  • 弊端一:存储开销/GC 压力大 ,数据/索引各占一半
  • 弊端一:CPU 缓存命中率低,降低 CPU 利用率,对写入友好,但访问低效

Tungsten HashMap :

  • Tungsten:用数组 + 内存页来实现。数组中存储元素:Hash code + Tungsten 内存地址,即:Object 引用 + Offset 的 128 位地址
  • 存储单元:内存页 (Java Object),一个内存页能存储多个数据条目。对 GC 友好
  • 内存页 : 用连续空间来存储数据,内存页 + 偏移量定位到每个数据元素。内存的访问方式成了顺序读取(SequentialAccess)。能提升 CPU cache 利用率,减少 CPU 中断

全阶段代码生成

迭代器嵌套 :同个 Stage 内部,把多个 RDD 的 compute 函数合成一个函数,再一次性输出数据
WSCG :基于同一 Stage 内操作符的调用关系,把所有计算进行手写,并合成一个函数

火山迭代模型

迭代器嵌套 (Volcano Iteration Model) 的计算模式有两种操作:

  • 内存数据的随机存取
  • 虚函数调用(next)

WSCG

Tungsten 引入 WSCG 机制,消除了 VI 模型引入的计算开销

手写代码例子 :

var count = 0for (citizen <- citizens) {if(citizen.city == "Beijing")count += 1
}

WSCG 工作过程 : 基于性能较差的代码,在运行时动态地 (On The Fly) 重构出性能更好的代码

运行时动态生成

手写代码的生成过程:

  • 从父节点到子节点,递归调用 doProduce,生成代码框架
  • 从子节点到父节点,递归调用 doConsume,向框架填充每一个操作符的运算逻辑
1 while (table.hasNext()) {InternalRow row = table.next()2  if (row.getString(2) == "Beijing") {3    Int user Id = row.getInt(0)rowWriter.write(0, userId)
4    ret = rowWriter.getRow()}
}

Spark Tungsten相关推荐

  1. Spark Tungsten揭秘 Day3 内存分配和管理内幕

    Spark Tungsten揭秘 Day3 内存分配和管理内幕 恭喜Spark2.0发布,今天会看一下2.0的源码. 今天会讲下Tungsten内存分配和管理的内幕.Tungsten想要工作,要有数据 ...

  2. Apache Spark 内存管理详解

    原文出处: IBM developerWorks Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 ...

  3. Spark大数据平台应用实战

    对于一个具有相当技术门槛与复杂度的平台,Spark从诞生到正式版本的成熟,经历的时间如此之短,让人惊诧.2009年,Spark诞生于伯克利大学AMPLab,于2010年正式开源,2013年成为了Apa ...

  4. Spark 内存管理详解(下):内存管理

    本文转自:Spark内存管理详解(下)--内存管理 本文最初由IBM developerWorks中国网站发表,其链接为Apache Spark内存管理详解 在这里,正文内容分为上下两篇来阐述,这是下 ...

  5. 向量化执行引擎是怎么玩的?

    在比较前沿的数据库中,比如cilckhouse,polar-x,TDSQL,都提到了一个比较新的词汇,叫向量化执行引擎. clickhouse polarDB-X tdsql-A 向量化执行引擎似乎已 ...

  6. 进阶大数据架构师学习路线

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/25b820fe1d054f53bab70310694faffe.jpeg#pic_center 文末有惊喜 大数据架 ...

  7. Spark2.1 内存管理详解

    本文中阐述的原理基于 Spark 2.1 版本,阅读本文需要读者有一定的 Spark 和 Java 基础,了解 RDD.Shuffle.JVM 等相关概念. 在执行 Spark 的应用程序时,Spar ...

  8. 上海大数据技术汇(浦东爱酷空间)

    由创略科技赞助的大数据技术汇第二场线下公益技术交流开始报名啦: https://www.slidestalk.com/m/4 这次示说网邀请了 Spark 核心贡献者,前databricks工程师,P ...

  9. Project Tungsten:让Spark将硬件性能压榨到极限

     Project Tungsten:让Spark将硬件性能压榨到极限 摘要:对于Spark来说,通用只是其目标之一,更好的性能同样是其赖以生存的立足之本.北京时间4月28日晚,Databricks ...

最新文章

  1. HibernateDaoSupport的使用
  2. FPGA Design's Tips
  3. centos 5.0 编译安装apache 2.2.6+php5.2.5+mysql5.0.46+ZEND
  4. Bootstrap手风琴菜单
  5. 在Windows系统上安装PHP工作环境
  6. 数据隐私与加密学技术 |链捕手
  7. [挖坟] 突破WINISO未注册时100M限制
  8. 千方百剂创建账套服务器文件,如何修改sql server 2000身份验证模式和系统管理员_数据库技巧...
  9. oracle19c报价_官宣:Oracle数据库19c在Oracle Exadata上发布啦!
  10. 【图像处理】多光谱 波长波段划分 主要波段特性 植被遥感原理 典型植被指数
  11. 计算机系统课程 笔记总结 CSAPP第四章 处理器体系结构(4.1-4.3)
  12. 气传导蓝牙耳机哪个牌子好?口碑好的气传导耳机分享
  13. javascript学习1-变量和语句
  14. 神童频现,这到底是人性的扭曲还是?
  15. Python接私活,兼职也可以月入10000+。Python爬虫兼职
  16. [源码解析] PyTorch 分布式(2) ----- DataParallel(上)
  17. 官网教程:什么是Apache Hadoop?
  18. Linux 监控命令
  19. Qt基于定时器实现简单动图展示(2例)
  20. buu 达芬奇 ROT

热门文章

  1. 【转】TTL电平与RS232电平差异
  2. 中国人学习日语实用网站网址大集合
  3. R语言计算Roger遗传距离
  4. 成功的数据驱动型公司为什么会采用Data Mesh?
  5. 主动学习(Active Learning)系列介绍(一)基本概念及应用场景
  6. 产品开发管理方法论之 IPD ——读《新产品开发管理,就用IPD》
  7. 《Android移动应用基础教程》(Android Studio)(第二版)黑马教程 课后题答案第一章
  8. 看看SRI的“可穿戴机器人”:能让人跑得更快、负重更多的可穿戴技术(视频)
  9. 实验32:气压温度传感器实验
  10. 计算机技术调剂控制工程,力控制工程接收调剂研究生 - 中国考研网