说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

HTML文档下载 WORD文档下载 PDF文档下载
对于Spark来说,通用只是其目标之一,更好的性能同样是其赖以生存的立足之本。北京时间4月28日晚,Databricks在其官方博客上发布了Tungsten项目,并简述了Spark性能提升下一阶段的RoadMap。

本文编译自Databricks Blog(Project Tungsten: Bringing Spark Closer to Bare Metal),作者Reynold Xin(@hashjoin)、Josh Rosen。由七牛云存储技术总监陈超(@CrazyJvm)友情审校。

以下为原文:

在之前的博文中,我们回顾和总结了2014年Spark在性能提升上所做的努力。本篇博文中,我们将为你介绍性能提升的下一阶段——Tungsten。在2014年,我们目睹了Spark缔造大规模排序的新世界纪录,同时也看到了Spark整个引擎的大幅度提升——从Python到SQL再到机器学习。

Tungsten项目将是Spark自诞生以来内核级别的最大改动,以大幅度提升Spark应用程序的内存和CPU利用率为目标,旨在最大程度上压榨新时代硬件性能。Project Tungsten包括了3个方面的努力:

  • Memory Management和Binary Processing:利用应用的语义(application semantics)来更明确地管理内存,同时消除JVM对象模型和垃圾回收开销。
  • Cache-aware computation(缓存友好的计算):使用算法和数据结构来实现内存分级结构(memory hierarchy)。
  • 代码生成(Code generation):使用代码生成来利用新型编译器和CPU。

之所以大幅度聚焦内存和CPU的利用,其主要原因就在于:对比IO和网络通信,Spark在CPU和内存上遭遇的瓶颈日益增多。详细信息可以查看最新的大数据负载性能研究(Ousterhout ),而我们在为Databricks Cloud用户做优化调整时也得出了类似的结论。

为什么CPU会成为新的瓶颈?这里存在多个问题:首先,在硬件配置中,IO带宽提升的非常明显,比如10Gbps网络和SSD存储(或者做了条文化处理的HDD阵列)提供的高带宽;从软件的角度来看,通过Spark优化器基于业务对输入数据进行剪枝,当下许多类型的工作负载已经不会再需要使用大量的IO;在Spark Shuffle子系统中,对比底层硬件系统提供的原始吞吐量,序列化和哈希(CPU相关)成为主要瓶颈。从种种迹象来看,对比IO,Spark当下更受限于CPU效率和内存压力。

1. Memory Management和Binary Processing

在JVM上的应用程序通常依赖JVM的垃圾回收机制来管理内存。毫无疑问,JVM绝对是一个伟大的工程,为不同工作负载提供了一个通用的运行环境。然而,随着Spark应用程序性能的不断提升,JVM对象和GC开销产生的影响将非常致命。

一直以来,Java对象产生的开销都非常大。在UTF-8编码上,简单如“abcd”这样的字符串也需要4个字节进行储存。然而,到了JVM情况就更糟糕了。为了更加通用,它重新定制了自己的储存机制——使用UTF-16方式编码每个字符(2字节),与此同时,每个String对象还包含一个12字节的header,和一个8字节的哈希编码,我们可以从 Java Object Layout工具的输出上获得一个更清晰的理解:

java.lang.String object internals:OFFSET  SIZE   TYPE DESCRIPTION                    VALUE     0     4        (object header)                ...     4     4        (object header)                ...     8     4        (object header)                ...    12     4 char[] String.value                   []    16     4    int String.hash                    0    20     4    int String.hash32                  0Instance size: 24 bytes (reported by Instrumentation API)
毫无疑问,在JVM对象模型中,一个4字节的字符串需要48字节的空间来存储!

JVM对象带来的另一个问题是GC。从高等级上看,通常情况下GC会将对象划分成两种类型:第一种会有很高的allocation/deallocation(年轻代),另一种的状态非常稳定(年老代)。通过利用年轻代对象的瞬时特性,垃圾收集器可以更有效率地对其进行管理。在GC可以可靠地估算对象的生命周期时,这种机制可以良好运行,但是如果只是基于一个很短的时间,这个机制很显然会遭遇困境,比如对象忽然从年轻代进入到年老代。鉴于这种实现基于一个启发和估计的原理,性能可以通过GC调优的一些“黑魔法”来实现,因此你可能需要给JVM更多的参数让其弄清楚对象的生命周期。

然而,Spark追求的不仅仅是通用性。在计算上,Spark了解每个步骤的数据传输,以及每个作业和任务的范围。因此,对比JVM垃圾收集器,Spark知悉内存块生命周期的更多信息,从而在内存管理上拥有比JVM更具效率的可能。

为了扭转对象开销和无效率GC产生的影响,我们引入了一个显式的内存管理器让Spark操作可以直接针对二进制数据而不是Java对象。它基于sun.misc.Unsafe建立,由JVM提供,一个类似C的内存访问功能(比如explicit allocation、deallocation和pointer arithmetics)。此外,Unsafe方法是内置的,这意味着,每个方法都将由JIT编译成单一的机器指令。

在某些方面,Spark已经开始利用内存管理。2014年,Databricks引入了一个新的基于Netty的网络传输机制,它使用一个类jemalloc的内存管理器来管理所有网络缓冲。这个机制让Spark shuffle得到了非常大的改善,也帮助了Spark创造了新的世界纪录。

新内存管理的首次亮相将出现在Spark 1.4版本,它包含了一个由Spark管理,可以直接在内存中操作二进制数据的hashmap。对比标准的Java HashMap,该实现避免了很多中间环节开销,并且对垃圾收集器透明。


当下,这个功能仍然处于开发阶段,但是其展现的初始测试行能已然令人兴奋。如上图所示,我们在3个不同的途径中对比了聚合计算的吞吐量——开发中的新模型、offheap模型、以及java.util.HashMap。新的hashmap可以支撑每秒超过100万的聚合操作,大约是java.util.HashMap的两倍。更重要的是,在没有太多参数调优的情况下,随着内存利用增加,这个模式基本上不存在性能的衰弱,而使用JVM默认模式最终已被GC压垮。

在Spark 1.4中,这个hashmap可以为DataFracmes和SQL的聚合处理使用,而在1.5中,我们将为其他操作提供一个让其利用这个特性的数据结构,比如sort和join。毫无疑问,它将应用到大量需要调优GC以获得高性能的场景。

2. Cache-aware computation(缓存友好的计算)

在解释Cache-aware computation之前,我们首先回顾一下“内存计算”,也是Spark广为业内知晓的优势。对于Spark来说,它可以更好地利用集群中的内存资源,提供了比基于磁盘解决方案更快的速度。然而,Spark同样可以处理超过内存大小的数据,自动地外溢到磁盘,并执行额外的操作,比如排序和哈希。

类似的情况,Cache-aware computation通过使用 L1/ L2/L3 CPU缓存来提升速度,同样也可以处理超过寄存器大小的数据。在给用户Spark应用程序做性能分析时,我们发现大量的CPU时间因为等待从内存中读取数据而浪费。在 Tungsten项目中,我们设计了更加缓存友好的算法和数据结构,从而让Spark应用程序可以花费更少的时间等待CPU从内存中读取数据,也给有用工作提供了更多的计算时间。

我们不妨看向对记录排序的例子。一个标准的排序步骤需要为记录储存一组的指针,并使用quicksort 来互换指针直到所有记录被排序。基于顺序扫描的特性,排序通常能获得一个不错的缓存命中率。然而,排序一组指针的缓存命中率却很低,因为每个比较运算都需要对两个指针解引用,而这两个指针对应的却是内存中两个随机位置的数据。


那么,我们该如何提高排序中的缓存本地性?其中一个方法就是通过指针顺序地储存每个记录的sort key。举个例子,如果sort key是一个64位的整型,那么我们需要在指针阵列中使用128位(64位指针,64位sort key)来储存每条记录。这个途径下,每个quicksort对比操作只需要线性的查找每对pointer-key,从而不会产生任何的随机扫描。希望上述解释可以让你对我们提高缓存本地性的方法有一定的了解。

这样一来,我们又如何将这些优化应用到Spark?大多数分布式数据处理都可以归结为多个操作组成的一个小列表,比如聚合、排序和join。因此,通过提升这些操作的效率,我们可以从整体上提升Spark。我们已经为排序操作建立了一个新的版本,它比老版本的速度快5倍。这个新的sort将会被应用到sort-based shuffle、high cardinality aggregations和sort-merge join operator。在2015年底,所有Spark上的低等级算法都将升级为cache-aware,从而让所有应用程序的效率都得到提高——从机器学习到SQL。

3. 代码生成

大约在1年前,Spark引入代码生成用于SQL和DataFrames里的表达式求值(expression evaluation)。表达式求值的过程是在特定的记录上计算一个表达式的值(比如age > 35 && age < 40)。当然,这里是在运行时,而不是在一个缓慢的解释器中为每个行做单步调试。对比解释器,代码生成去掉了原始数据类型的封装,更重要的是,避免了昂贵的多态函数调度。

在之前的博文中,我们阐述了代码生成可以加速(接近一个量级)多种TPC-DS查询。当下,我们正在努力让代码生成可以应用到所有的内置表达式上。此外,我们计划提升代码生成的等级,从每次一条记录表达式求值到向量化表达式求值,使用JIT来开发更好的作用于新型CPU的指令流水线,从而在同时处理多条记录。

在通过表达式求值优化内部组件的CPU效率之外,我们还期望将代码生成推到更广泛的地方,其中一个就是shuffle过程中将数据从内存二进制格式转换到wire-protocol。如之前所述,取代带宽,shuffle通常会因数据系列化出现瓶颈。通过代码生成,我们可以显著地提升序列化吞吐量,从而反过来作用到shuffle网络吞吐量的提升。


上面的图片对比了单线程对800万复杂行做shuffle的性能,分别使用的是Kryo和代码生成,在速度上后者是前者的2倍以上。

Tungsten和未来的工作

在未来的几个版本中,Tungsten将大幅度提升Spark的核心引擎。它首先将登陆Spark 1.4版本,包括了Dataframe API中聚合操作的内存管理,以及定制化序列化器。二进制内存管理的扩展和cache-aware数据结构将出现在Spark 1.5的部分项目(基于DataFrame模型)中。当然如果需要的话,这个提升也会应用到Spark RDD API。

对于Spark,Tungsten是一个长期的项目,因此也存在很多的可能性。值得关注的是,我们还将考察LLVM或者OpenCL,让Spark应用程序可以利用新型CPU所提供的SSE/SIMD指令,以及GPU更好的并行性来提升机器学习和图的计算。

Spark不变的目标就是提供一个单一的平台,让用户可以从中获得更好的分布式算法来匹配任何类型的数据处理任务。其中,性能一直是主要的目标之一,而Tungsten的目标就是让Spark应用程序达到硬件性能的极限。更多详情可以持续关注Databricks博客,以及6月旧金山的Spark Summit。

设计Chat程序 -VB资料 设计E-mail程序 -VB资料 使用VB获得一页的HTML代码 使用VB收发电子邮件 VB使用超链接和发送Email VB使用浏览器的文件复制对话框 输入/输出篇 -VB资料 通过WnetEnumResource函数获得网络资源 -VB资料 通往 Internet 的捷径-VB资料 显示计算机的名称 -VB资料 VB用 MAPI 控件实现发送邮件 VB用 WinSock 控件下载文件 VB用 Winsock 实现聊天的程序 VB用Internet Transfer编写FTP程序 VB用Sockets发送电子邮件 用VB 创建自己的通信程序 用VB5.0开发通信软件的技巧 用VB5开发IE 用VB编写网络寻呼 用VB编写小型的网络系统 用VB创建自己的通信程序 用VB构建Internet的应用 用VB开发标准CGI程序 用VB实现客户——服务器(TCP/IP)编程实例 用VB实现聊天讨论室和点对点会话 用VB写一个定时PING某IP的程序 用VB制作浏览器 用Visual Basic 5.0设计E-mail程序(MAPI) 用Visual Basic6.0编写客户服务器程序 用Visual Basic创建FTP组件 用Visual Basic开发数据库浏览器 LIB 在线等!!!!!!!! ADO+SQL Server 如何用VB编写发邮件的程序? 数据库搜索的一个怪问题 怎么得到从另一个页面传来的参数 Full Text: Bush Speech Aboard the USS Abraham Lincoln 请问 怎么实现变量互换阿 我是新手~~~ FAT错误,请问如何修复? flashget那个小方框怎么做? 谁有《UML与Rational Rose2002从入门到精通》书的选配光盘 急!!!随机函数 FAT错误,请高手帮忙修复。 内部消息(我对我说的负责) 不定时开放FTP服务器 急,求救!!! 一个很简单的问题. 为什么 “基本图象处理代码(1) ehom(原作)”对grayscale不对? linux下的oicq 有马? 帮帮我,好吗,感谢,非常 help,help,sql query question? 大家认为考研考进其他学校(且跨专业)的可能性有多大 显示图片 数据库搜索的一个怪问题 共享上网问题!急~!!!! 句柄和指针有什么区别吗? 大虾快进来,帮帮兄弟们!!!再现等待!高分!! 请问C++Builder的程序中能不能使用*.mdb类型的数据库? 帮帮忙!!个位大哥 请问用java编程能实现数据采集的程序并进行传输(即c/s模式)吗? 请问什么命令找开一个窗体的? 请问:如何从文件中获取icon并得到HBITMAP句柄? 如何在客户端打开一个word文件 MVP是个什么概念???? linux启动不了,Bringup loopback interface时出错,请问是什么原因? 帮帮忙!! 我海军一艘潜艇失事 70名官兵不幸全部遇难!! 明天朋友结婚,征集整人的法子 是谁删除了我贴?? 而且没有跟我说一声!!! 白天工作,晚上溜狗,爽呀!比大暑天喝了冰镇雪碧还爽! 我的jsp服务器是iis+TOMCAT+win2000pro 不知怎的每次用不了多久就显示出 网页无法显示 目前访问该 Web 站点的用户过多,我只是自已用怎么 终于有星了,高兴,散分(第一次散分,请斑竹手下留情) 我的刚装的2000进入启动界面时,进度条读到2/3时就蓝屏了! 请问在运行时向ActiveX控件中添加ActiveX控件的方法是什么? 高手请进:如何在WinNT以上系统进行BIOS读取! 毕业设计的问题,请各位大哥帮小弟一个忙 备份与恢复 数据备份与恢复 我用win2k,下载了php4.3.1,extension_dir是c:\php\ext 可是里面没有php_gd.dll,怎么办,到哪里可以down一个补上? 帮我一下:解决中文问题 新手问题:怎么在用ATL COM WIZARD已生成的dll加入MFC 请问如何删除系统? 小明家进行装修,厨房用边长0.2米的方砖铺地需要200块,客厅面积是厨房的3.6倍,客厅面积是多少 要分步的 成行的 带单位的 李叔叔平均一步长约70厘米,他绕着一块长是宽2倍的长方形的边沿走了一圈,正好走了900步.求地的面积? 质量316g的铁块,体积是多少、(P铁=7.9×10三次方kg/m三次方—) 小屁孩日记4的主要地点有什么 一种香菇的含水率为80%,烘干后还剩( )% 若该项试验始终在黑暗中进行,有机物含量不断减少,原因是 小屁孩日记的四本都讲了什么从第一本开始到第四本,一本一本讲,这本都讲了什么, 有一块正方形地,边长是20米,在它的中央有一个圆形花圃,直径是8米,现在要在花圃周围修一条最宽的环形路,剩下部分种草,求路的面积和种草部分的面积. 幼苗体内的有机物含量在黑暗中不断减少的原因(两点) 帮忙翻译这个单词 一块正方形田地,边长为20米.在它中央有一个圆形花圃,直径是6米,在它周围修建一条最大的环形走到.剩下的四四个角也建成花圃,花圃的总面积是多少? 秋天温带地区植物的树叶落下的主要原因是为了降低 A蒸腾作用 B有机物的消耗 英语翻译 有一块正方形地,边长是20米,在它的中央有一个圆形花圃,直径是8米,现在要在花圃周围修一条最宽的有一块正方形地,边长是20米,在它的中央有一个圆形花圃, 直径是8米,现在要在花圃周围修一 小李以一定的初速度将石子向斜上方抛出去,石子所做的运动是斜抛运动,他想:怎样才能将石子抛得更远呢?于是他找来小王一起做了如下探究:他们用如下图所示的装置来做实验,保持容器水 汽车以1米每二次方秒的加速度启动,同时车后60米初有一人以一定的速度V0匀速追赶要 有一块边长是8米的正方形的地,在它的中央有一个圆形花圃,直径是6米,在花圃的周围建一条最大的环形在花圃的周围建一条最大的环形走道,剩下的四个角,种植成草地.求建成的环形走道的面 某人站在地面向斜上方抛出一个物体,物体的运动轨迹是是抛物线型的,问该物体抛出时的速度和落地后的速度是否一样?下面有2种答案吖! 写一篇英语作文,要求:写自己喜欢的运动 有一块正方形地,如图所示,边长是30米,在它的中央有一个圆形花圃,直径是20厘米.现要在花圃周围修筑一条最大的环形石子路,请你在图上画出这条环形路,并求出环形路的面积. 向斜上方抛出一个石子,说明石子为什么不沿着抛出的方向做直线运动? 黄鼠狼的药用价值 新鲜香菇的含水率,和香菇的成熟度有什么关系?是不是越成熟含水率越高? 速度为零能否说明物体没有运动?有没有这样一种情况:物体速度大小为零但有运动方向?若有请举例? 问题:黄鼠狼肉有药用价值吗 修 改病句制度的优越、国力的强大是中国撤离在利比亚人员行动能否取得成功的坚实基础.学校开展的“感恩、奋进”活动,掀起了同学间互帮、互助、互学、互进,增进了彼此的友谊. VIETNAMESE RESTAURANT怎么样 a cup oftea和a glass of milk还有He is 先回答的是最佳 这片土地是圣神的 ‘每一片土地都是神圣的’这句话改成比喻句怎么改? 萧山游乐场内有一块半径为5米的圆形空地,先计划在他的中央修建一个半径为3米的花坛,剩余部分铺成观光路求观光路的面积 这片土地是圣神的主要内容 What's in a name According to Shakespeare's“What’s in a name?”According to Shakespeare’s Romeo and Juliet,there is not too much.“That which we call a rose by any other name would smell as sweet.”But Shakespeare may have been wrong.I 悠悠球用汽油洗轴洗完轴晒干后 加润滑油吗 游乐场里有一个圆形湖,湖内有一圆形湖心岛,最初岛的面积是环岛水面面积的1/3,由于旅游的需要,湖心岛进行了扩建,面积增加了3454平方米,此时岛的面积占整个圆形湖面积的9/25,则圆形湖的周 he still hasn't got used to___ (live) in the city since he came here 3 years ago. A :Do you happen to know what's on after the news B:--------------------------------A :Do you happen to know what's on after the news B:--------------------------------------------a there is no important news after that.b it's a documentary about ani 她有一张小嘴 用英语怎么说急 he ofen came to see me ---he live here A.while B.since 及解析live改为lived 厚的四字成语 我有一个樱桃小嘴英语怎么说? 第二题,B项里在最高点时向心加速度为零吗? 我梦到牵着一只猴子,还拿鞭子打它 干香菇大的好还是小的好 急.若a÷1/2=b÷4/3=c÷5/5,且a、b、c都不为零,试比较a、b、c的大小,并说明理由.如上若a÷1/2=b÷4/3=c÷5/5,且a、b、c都不为零,试比较a、b、c的大小,并说明理由.要比较,以及理由,快 梦见猴子:梦到老公被猴子咬到,而我在拿着鞭子追打猴子 无法拍摄的情况,我要一个科学的解释.我要的是自然或物理现象!( 拍摄工具正常,用法正( 拍摄工具正常,用法正常,对面的人正常) 我想问的不是怎样拍好而是怎样干扰 做匀变速直线运动的物体,在第2 s内位移为6 m,第5 s内位移为零,则其初速度是______m/s 汽车以1m/s∧2的加速度启动,同时车后60m远处有一人从一定的速度v.匀速追赶车停下,已知人在离车距离小于20m,持续时间为2s喊停车,才能把信息传给司机,问(1)v.至少要多大?(2)如果以v.=10 懂鸟类的朋友来帮下忙!看看这是什么鸟! 求解释关于合力分力的问题 如图所示,挑水时,水桶绳子分别为a,b,c三种情况,哪种情况下绳子最容易断 把下面的单词(20个)翻译成中文1. Honey Apples2. Pork Egg Rolls3. Chicken Egg Rolls4. Chinese Tofu & Broccoli Egg Rolls (Vegetarian)5. Chinese Vegetarian Egg Rolls6. Chinese Potstickers7. Melon Shells Filled with Fruits8. Red Bean Soup9. 液压缸下坠 如图所示,a,b,c三根绳子完全相同,其中b绳水平,c绳下挂一重物.若使物体加重,则这三根绳子中最先断的是 英语翻译public limitations on land 干香菇的利润怎么样 挑水时,水桶上的绳子的状况分别是abc三种.则绳子在__种情况下容易断些c在最低处.所成的角度最大 a在最高处 所成角度最小 Find a good way to the end,don`t worry about the 香菇干怎样弄干的 用绳子系住水桶提水,手受到竖直向下的力,它的施力物体是A水桶B绳子C手D地球 武汉商户与城管发生持刀冲突 双方均有中俄加快在远东地区寻求经贸合作“突破报告说油矿资源将成肯尼亚新财源临安男子自制枪支出售还武装贩毒 脑子日本自卫队将于11月举行海陆空联合“日本一女子被控在网吧卫生间生下男婴后埃及临时政府法律草案规定严厉打击民众韩谴责靖国神社合祀韩战殁者 称日决定日本民主党党首网上解释“四面楚歌”含日本一女子被控在网吧卫生间生下男婴后韩谴责靖国神社合祀韩战殁者 称日决定美一农民发现两副恐龙骨架 有望拍出2日本自卫队将于11月举行海陆空联合“随笔:肯尼亚人的“掌上生活”日本民主党党首网上解释“四面楚歌”含海宁消防联合电信开展“办业务送消防体中亚区域经济合作第12次部长级会议在尸检报告排除阿拉法特死于钋中毒的可能阿拉法特尸检报告排除其死于钋中毒美媒:全球房价再度飞涨 中国等国家风德媒爆美或长期监听默克尔电话 奥巴马重庆市政协四届四次会议开幕福建继续发布寒潮警报 24至26日大霸王级寒潮侵袭海南 海口最低温跌至9驻村“第一书记”的扶贫日记全球十大环境热点评选揭晓 《巴黎气候河北一车管所所长被刺身亡 犯罪嫌疑人毛茸茸变光溜溜,“猴年春晚吉祥物3D七种保护肩部的锻炼方法进家门最忌讳见到什么?太多人不知道卓别林:当我开始爱自己加拿大首富座驾国产红旗!此人是谁?2015 2016赛季CBA第32轮中东祸起萧墙,油价谁来垂青,主权尘埃主力洗盘有何意图?下周还会反弹吗?媒体专访表情包男神 曾被称为“反台独2015基金大赚7146亿,2016斯坦福新研究:儿童语言能力与家庭条件为什么“情感连接式”的销售将彻底颠覆温柔相待的你,终究相忘江湖国产动画片之魂 雷锋教你开嘎斯51梅西第5座金球亮相巴萨博物馆
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘