1/10计算资源,1/3耗时,Spark颠覆MapReduce保持的排序记录

在过去几年,Apache Spark的采用以惊人的速度增加着,通常被作为MapReduce后继,可以支撑数千节点规模的集群部署。在内存中数据处理上,Apache Spark比MapReduce更加高效已经得到广泛认识;但是当数据量远超内存容量时,我们也听到了一些机构在Spark使用上的困扰。因此,我们与Spark社区一起,投入了大量的精力做Spark稳定性、扩展性、性能等方面的提升。既然Spark在GB或TB级别数据上运行良好,那么它在PB级数据上也应当同样如此。

为了评估这些工作,最近我们与AWS一起完成了一个Sort Benchmark(Daytona Gray类别)测试,一个考量系统排序100TB数据(万亿条记录)速度的行业基准测试。在此之前,这项基准测试的世界记录保持者是雅虎,使用2100节点的Hadoop MapReduce集群在72分钟内完成计算。而根据测试结果得知,在使用了206个EC2节点的情况下,Spark将排序用时缩短到了23分钟。这意味着在使用十分之一计算资源的情况下,相同数据的排序上,Spark比MapReduce快3倍!

此外,在没有官方PB排序对比的情况下,我们首次将Spark推到了1PB数据(十万亿条记录)的排序。这个测试的结果是,在使用190个节点的情况下,工作负载在短短不到4小时内完成,同样远超雅虎之前使用3800台主机耗时16个小时的记录。同时,据我们所知,这也是公用云环境首次完成的PB级排序测试。

Hadoop World Record Spark 100 TB Spark 1 PB Data Size 102.5 TB 100 TB 1000 TB Elapsed Time 72 mins 23 mins 234 mins # Nodes 2100 206 190 # Cores 50400 6592 6080 # Reducers 10,000 29,000 250,000 1.42 TB/min 4.27 TB/min 4.27 TB/min Rate/node 0.67 GB/min 20.7 GB/min 22.5 GB/min Sort Benchmark Daytona Rules Yes Yes No Environment dedicated data center EC2 (i2.8xlarge) EC2 (i2.8xlarge)

为什么会选择排序?

排序的核心是shuffle操作,数据的传输会横跨集群中所有主机。Shuffle基本支持了所有的分布式数据处理负载。举个例子,在一个连接了两个不同数据源的SQL查询中,会使用shuffle将需要连接数据的元组移动到同一台主机;同时,类似ALS等协同过滤算法同样需要依赖shuffle在网络中发送用户或产品的评级(ratings)和权重(weights)。

大部分数据管道开始时都会有大量的原始数据,但是在管道处理过程中,随着越来越多不相干数据被过滤,或者中间数据被更简洁的表示,数据量必然会减少。在100TB原始数据的查询上,网络上shuffle的数据可能只有100TB的一小部分,这种模式也体现在MapReduce的命名。

然而,排序却是非常有挑战的,因为数据管道中的数据量并不会减少。如果对100TB的原始数据进行排序,网络中shuffle的数据必然也是100TB。同时,在Daytona类型的基准测试中,为了容错,不管是输入数据还是输出数据都需要做备份。实际上,在100TB的数据排序上,我们可能会产生500TB的磁盘I/O及200TB的网络I/O。

因此,基于上述原因,当我们寻找Spark的测量标准和提升办法时,排序这个最苛刻的工作负载成为了对比的不二之选。

产生如此结果的技术实现

在超大规模工作负载上,我们投入了大量的精力来提升Spark。从细节上看,与这个基准测试高度相关的工作主要有3个:

首先及最关键的,在Spark 1.1中我们引入了一个全新的shuffle实现,也就是基于排序的shuffle(SPARK­2045)。在此之前,Spark做的是基于哈希的shuffle实现,它需要在内存中同时保持P(reduce的分割数量)个缓冲区。而在基于排序的shuffle下,任何时候系统只使用一个缓冲区。这个操作将显著地减少内存开销,因此同一个场景下可以支撑数十万任务(我们在PB排序中使用了2.5万个任务)。

其次,我们修订了Spark的网络模型,通过JNI(SPARK­2468)使用基于Netty的Epoll本地端口传输。同时,新的模型还拥有了独立的内存池,绕过了JVM的内存分配器,从而减少垃圾回收造成的影响。

最后但同样重要的是,我们建立了一个外部shuffle服务(SPARK­3796),它与Spark本身的执行器完全解耦。这个新的服务基于上文所述的网络模型,同时,在Spark本身的执行器忙于GC处理时,它仍然可以保证shuffle文件处理的继续执行。

通过这三项改变,我们的Spark集群在map阶段单 节点可以支撑每秒3GB的IO吞吐,在reduce阶段单节点可以支撑1.1GB,从而榨干这些机器间10Gbps的网络带宽。

更多的技术细节

TimSort:在Spark 1.1版本中,我们将默认排序算法从 quicksort转换到TimSort,它是合并排序和嵌入排序的一个衍生。在大部分现实世界数据集中,TimSort比quicksort更加高效,在部分排序数据中表现则更为优秀。不管在map阶段还是Reduce阶段,我们都使用了TimSort。

缓存位置的利用:在排序基准测试中,每条记录的大小都是100字节,而被排序的键是前10个字节。在排序项目的性能分析阶段,我们注意到缓存命中率不如人意,因为每次比较都需要进行一个随机的对象指针查询。为此,我们重新设计了记录在内存的布局,用16字节长度(两个长整形)的记录来表示每条记录。在这里,前10个字节代表了排序的键,后4个字节则代表了记录的位置(鉴于字节顺序和符号,这点并不容易发现)。这样一来,每个比较只需要做一次缓存查询,而且它们都是连续的,从而避免了随机的内存查询。

使用TimSort和新的布局方式来利用缓存命中,排序所占用的CPU时间足足减少了5倍。

大规模下的容错机制:在大规模下,许多问题都会暴露。在这个测试过程中,我们看到因为网络连通问题出现的节点丢失,Linux内核自旋,以及因为内存碎片整理造成的节点停滞。幸运的是,Spark的容错机制非常好,并且顺利的进行故障恢复。

AWS的能量:如上文所述,我们使用了206个i2.8xlarge实例来跑这个I/O密集测试。通过SSD,这些实例交付了非常高的I/O吞吐量。我们将这些实例放到一个VPC放置组中,从而通过单SR-IOV增强网络性能,以获得高性能(10Gbps)、低延时和低抖动。

Spark只能在内存中大放异彩?

这个误解一直围绕着Spark,特别是刚进入社区中的新人更是如此认为。不错,Spark因为内存计算的高性能闻名,然而Spark的设计初衷和理念却是一个通用的大数据处理平台——不管是使用内存还是磁盘。在数据无法完全放入内存时,基本上所有的Spark运算符都会做一些额外的处理。通俗来说,Spark运算符是MapReduce的超集。

如本次测试所示,Spark可以胜任集群内存大小N倍的数据集处理。

总结

击败Hadoop MapReduce集群创造的大规模数据处理记录不仅是对我们工作的一个证明,也是对Spark承诺的一个验证——在任何数据体积,Spark在性能和扩展性上都更具优势。同时,我们也希望在用户使用过程中,Spark可以带来时间和开销上的双节省。

博文链接: Spark Breaks Previous Large-Scale Sort Record(翻译/童阳 责编/仲浩)

更多Spark及Hadoop信息可关注2014年12月12-14日在北京召开的2014中国大数据技术大会(暨第二届CCF大数据学术会议),届时百余位国内外顶尖技术人员、学术大师将送上第一手的实践分享。

免费订阅“CSDN云计算(左)和CSDN大数据(右)”微信公众号,实时掌握第一手云中消息,了解最新的大数据进展!

CSDN发布虚拟化、Docker、OpenStack、CloudStack、数据中心等相关云计算资讯,     分享Hadoop、Spark、NoSQL/NewSQL、HBase、Impala、内存计算、流计算、机器学习和智能算法等相关大数据观点,提供云计算和大数据技术、平台、实践和产业信息等服务。

时间: 2024-08-03 01:37:43

1/10计算资源,1/3耗时,Spark颠覆MapReduce保持的排序记录的相关文章

Spark 颠覆 MapReduce 保持的排序记录

在过去几年,Apache Spark的采用以惊人的速度增加着,通常被作为MapReduce后继,可以支撑数千节点规模的集群部署.在内存中数 据处理上,Apache Spark比MapReduce更加高效已经得到广泛认识:但是当数据量远超内存容量时,我们也听到了一些机构在Spark使用 上的困扰.因此,我们与Spark社区一起,投入了大量的精力做Spark稳定性.扩展性.性能等方面的提升.既然Spark在GB或TB级别数据上运行 良好,那么它在PB级数据上也应当同样如此. 为了评估这些工作,最近我

GPU云主机永久降价50% 美团云全面开放AI计算资源

本文讲的是 :  GPU云主机永久降价50% 美团云全面开放AI计算资源  ,   9月6日,美团云宣布GPU云主机计费永久性下调50%,并将全面开放人工智能计算资源,与各行各业共享成熟且丰富的AI计算能力.此次调价的产品不仅包括此前的M60云主机,还包括最新上线的高端AI服务器P40云主机.调价后,美团云GPU相关产品将达到行业最低价的3-8折,击穿行业价格底线. 高品质低价格 让智能计算普惠化 从AlphaGo战胜李世石到我国近日发布的<新一代人工智能发展规划>,人工智能已经步入高速发展阶

云计算被视为继大型计算机、个人计算机、互联网之后的第4次IT产业革命,顺应了当前各行业整合计算资源和服务能力的要求(转)

  云计算被视为继大型计算机.个人计算机.互联网之后的第4次IT产业革命,顺应了当前各行业整合计算资源和服务能力的要求,成为引领当今世界信息技术变革的主力军.越来越多的金融企业认识到只有与云计算结合,才能更好地支持业务发展和创新.本文将结合阿里金融云的特性,讲述券商IT系统上云的最佳实战经验. 阿里金融云于2013年底正式上线,主要面向银行.证券.基金.保险和信托等金融企业.不到一年时间,已经有200多家金融机构的IT系统全部或部分运行于金融云上.简单来说,金融云有以下特点. 安全合规.通过了国

双11狂欢让计算资源也成“剁手”热门

本文讲的是双11狂欢让计算资源也成"剁手"热门[IT168 云计算]创新创业的火热,让天猫双11已不仅是个人消费者的狂欢,还延伸到了企业采购领域.截至11月9日,超10万家创新创业企业,通过阿里云官网提交了计算资源采购意向. 今年天猫双11设置了双11特色分会场.通过网站,创新创业企业和开发者可以像网购奶粉一样,一键下单获取企业IT建设所需的计算资源产品与服务.而红包.秒杀.折扣.抽奖.解码游戏--这些在阿里云版的双11中也样样俱全. 通过云计算,创新创业企业可以不再采购硬件服务器,获

Spark vs. MapReduce 时间节约66%,计算节约40%

MapReduce为大数据挖掘提供了有力的支持,但是复杂的挖掘算法往往需要多个MapReduce作业才能完成,多个作业之间存在着冗余的磁盘读写开销和多次资源申请过程,使得基于MapReduce的算法实现存在严重的性能问题.后起之秀Spark得益于其在迭代计算和内存计算上的优势,可以自动调度复杂的计算任务,避免中间结果的磁盘读写和资源申请过程,非常适合数据挖掘算法.腾讯TDW Spark平台基于社区最新Spark版本进行深度改造,在性能.稳定和规模方面都得到了极大的提高,为大数据挖掘任务提供了有力

扎克伯格:FB用10%计算资源保护用户隐私

[搜狐IT消息]据国外媒体报道,利用新推出的"图谱搜索"功能,好友可以更方便地搜索到与 Facebook用户相关的资料.但Facebook CEO马克·扎克伯格(Mark Zuckerberg)承诺,用户无需担心 新的搜索功能会成为查看用户隐私材料的后门.图谱搜索"关注隐私.用户分享的大多数信息并非是公开的",新搜索工具知道该显示或隐藏哪些信息.扎克伯格表示,Facebook已经将相当大一部分计算资源用于保护用户隐私,"我们数据中心约10%的计算能力用于保

阿里云大数据MaxCompute计算资源分布以及LogView分析优化

MaxCompute(原ODPS)的概念 大数据计算服务(MaxCompute,原名ODPS)是一种快速.完全托管的PB/EB级数据仓库解决方案,具备万台服务器扩展能力和跨地域容灾能力,是阿里巴巴内部核心大数据平台,支撑每日百万级作业规模.MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全.(官方文档有这里就不多做介绍了)官方文档链接 优势 用户不必关心分布式计算细节,从而达到分析大数据的目的.

耗时计算-请教一下Matlab怎么计算代码的执行耗时

问题描述 请教一下Matlab怎么计算代码的执行耗时 Matlab怎么计算代码的执行耗时,要求支持code generation 不要说coder.extrinsic 'tic','toc',这个不支持code generation 解决方案 Profile(分析) 在加速你的matlab程序之前,你需要知道你的代码哪一部分运行最慢.matlab提供个简单的机制,让你能够知道你 的代码的某一部分运行所占用CPU时间.通过在代码段开始添加tic,及在结束添加toc:matlab就能计算出这一代 码

背水一战 Windows 10 (9) - 资源: 资源限定符概述, 资源限定符示例

原文:背水一战 Windows 10 (9) - 资源: 资源限定符概述, 资源限定符示例 [源码下载] 背水一战 Windows 10 (9) - 资源: 资源限定符概述, 资源限定符示例 作者:webabcd 介绍背水一战 Windows 10 之 资源 资源限定符概述 资源限定符示例 示例1.资源限定符概述Resource/Qualifiers/Summary.xaml <Page x:Class="Windows10.Resource.Qualifiers.Summary"