Tungsten项目概述

Tungsten号称Spark有史以来最大的改动,其致力于提升Spark程序对内存和CPU的利用率,使性能达到硬件的极限,主要工作包含以下三个方面

  1. Memory Management and Binary Processing: leveraging application semantics to manage memory explicitly and eliminate the overhead of JVM object model and garbage collection。
  2. Cache-aware computation: algorithms and data structures to exploit memory hierarchy。
  3. Code generation: using code generation to exploit modern compilers and CPUs。

大致的内容如下

  1. Memory Management and Binary Processing: off-heap管理内存,降低对象的开销和消除JVM GC带来的延时。
  2. Cache-aware computation: 优化存储,提升CPU L1/ L2/L3缓存命中率。
  3. Code generation: 优化Spark SQL的代码生成部分,提升CPU利用率。

上述第一点和内存管理相关,是本篇文章关注的重点。

为什么Tungsten关注内存和CPU

  1. 从硬件角度,网路带宽和磁盘读写都有大幅度提升,例如10Gbps的网络设备和SSD,使用SSD存储数据的公司在逐步增多,并且价格在可接受范围。
  2. 从软件角度,Spark做了许多降低网络传输和磁盘IO方面的工作,例如就近执行、序列化等。
  3. 此外,databricks的研究也表明CPU是主要的瓶颈,参考Spark Performance Analysis。

Spark中JVM的不足

运行在JVM之上的程序,依赖JVM管理内存及回收垃圾,但会存在两个显著问题

  1. Java对象空间开销大
    以UTF-8编码的字符串abcd为例,仅存储字符串信息需要4 bytes,然而使用Java的String存储则需要48 bytes,使用jol打印出String的内部占用(参考Java Object Layout(jol) ),如下

    OFFSET  SIZE     TYPE DESCRIPTION                       VALUE 0    12      (object header)                           N/A 12     4      char[] String.value                       N/A 16     4      int String.hash                           N/A 20     4      int String.hash32                         N/A
    Instance size: 24 bytes
    

    使用jol打印出abcd占用空间大小,如下

    java.lang.String@213214d1d footprint: COUNT       AVG       SUM   DESCRIPTION 1        24        24   [C 1        24        24   java.lang.String 2                  48   (total)
  2. GC带来的时间开销
    full gc会stop the world,增加程序耗时,甚至可能出现假死情况,并且这种情况没有日志输出,给问题排查带来一定难度。

基于以上考虑,Tungsten项目优化内存的使用,使用off-heap方式管理内存,不再依赖JVM,避免了存储的额外开销及GC的影响。

Tungsten内存管理

off-heap

off-heap是指类似C语言的方式,直接向OS申请及释放的内存。JVM提供了sun.misc.Unsafe API实现上述操作(参考Understanding sun.misc.Unsafe),Spark对应的代码如下

上图中Platform类是对sun.misc.Unsafe的简单封装,返回的内存地址和内存大小封装为MemoryBlock

off-heap内存管理

BytesToBytesMap为例介绍上面申请的MemoryBlock的使用。
Spark 内存管理之BytesToBytesMap

总结

介绍Tungsten中内存管理相关部分。

参考:
Project Tungsten: Bringing Apache Spark Closer to Bare Metal
Java Object Layout(jol)
Understanding sun.misc.Unsafe

Spark 内存管理之Tungsten相关推荐

  1. Apache Spark 内存管理详解

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

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

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

  3. spark内存管理模块

    Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行性能调优.本文旨在梳理出 ...

  4. spark从入门到精通spark内存管理详解- 堆内堆外内存管理

    前言 Spark作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解Spark内存管理的基本原理,有助于更好地开发Spark应用程序和进行性能调优.本文将详细介绍两部 ...

  5. Spark内存管理(3)—— 统一内存管理设计理念

    Spark内存管理系列文章:  Spark内存管理(1)-- 静态内存管理  Spark内存管理(2)-- 统一内存管理 在本文中,将会对各个内存的分布以及设计原理进行详细的阐述  相对于静态内存模型 ...

  6. Spark内存管理(2)—— 统一内存管理

    Spark内存管理系列文章:  Spark内存管理(1)-- 静态内存管理 堆内内存 Spark 1.6之后引入的统一内存管理机制,与静态内存管理的区别在于Storage和Execution共享同一块 ...

  7. Spark内存管理(1)—— 静态内存管理

    Spark内存管理简介 Spark从1.6开始引入了动态内存管理模式,即执行内存和存储内存之间可以相互抢占  Spark提供了2种内存分配模式: 静态内存管理 统一内存管理 本系列文章将分别对这两种内 ...

  8. 万字最全Spark内存管理详解

    今天和大家介绍Spark的内存模型,干货多多,不要错过奥~ 与数据频繁落盘的Mapreduce引擎不同,Spark是基于内存的分布式计算引擎,其内置强大的内存管理机制,保证数据优先内存处理,并支持数据 ...

  9. Spark内核解析之六:Spark 内存管理

    前言 在执行Spark 的应用程序时,Spark 集群会启动 Driver 和 Executor 两种 JVM 进程,前者为主控进程,负责创建 Spark 上下文,提交 Spark 作业(Job),并 ...

  10. Spark 内存管理内存空间分配_大数据培训

    静态内存管理 在 Spark 最初采用的静态内存管理机制下,存储内存.执行内存和其他内存的大小在 Spark 应用程序运行期间均为固定的,但用户可以应用程序启动前进行配置,堆内内存的分配如图6-2所示 ...

最新文章

  1. wget,curl 下载文件
  2. 基于互联网大脑架构的腾讯未来趋势分析[系列1]
  3. [YTU]_2627 (职工工资统计)
  4. [BTS]使用BizTalk开发应用系统,就是这么简单!
  5. java魂斗罗_java 魂斗罗
  6. Java配置信息工具jinfo
  7. 分布式领域CAP理论
  8. 一篇讲Java指令重排和内存可见性的好文
  9. 怎样写出别人无法维护的代码
  10. vue+axios方法封装(restful,ajax)
  11. Boot Camp 驱动
  12. 知道创宇荣获“年度公益贡献安全企业”及“中国网安产业100强”
  13. 2020-12-28
  14. 批量webp格式转换成jpg操作方法
  15. uniapp 评价应用_uniapp打开应用市场(APP端)
  16. QT:黑白棋的吃子规则(七)
  17. 字库点阵数据的竖置横排和横置横排区别
  18. 世事洞明职场“行”(上篇)——刘墉力作《我不是教你诈》花絮采撷
  19. 【时序】卷积自注意力 LogSparse Transformer 论文笔记
  20. Python学习笔记(一)三步走安装pip

热门文章

  1. 两列数据对比找不同,并且高亮数据不同的单元格
  2. linux进化树分析的软件,一款好用的进化树可视化编辑软件
  3. 大话西游2人数最多服务器,大话2大话各个服务器狂人榜排名 看大话如今服务器...
  4. 星之卡比镜之迷宫机器人_星之卡比镜之迷宫boss全方位攻略
  5. Raspberry Pi with Node.js and Arduino
  6. Fingerprint指纹识别学习
  7. 计算机为什么无法搜索功能,电脑搜索功能不能用怎么办?电脑搜索不能用的解决方法...
  8. 【仪器常用操作方法】33500B函数发生器常用操作方法
  9. wincc逻辑运算符_wincc中表达式及公式
  10. Apache配置反向代理