从Hadoop到Spark技术的革新
2019-05-23权赵恒李嘉迪
权赵恒 李嘉迪
摘要:随着互联网技术的飞速发展,人类社会逐渐进入了大数据的时代。海量数据的产生给现代人类带来了新的挑战,促使人们研究发现新的技术和手段去解决大数据带来的各种难题。Hadoop和Spark技术就是在这样的背景下产生的,目前在人们生活的各个领域,都离不开这两种技术的支持。本文主要以这两种技术为主,按照技术产生的时间顺序,分析了这两种技术的发展以及存在的问题。
关键词:大数据;大数据技术;Hadoop;Spark
中图分类号:TP3 文献标识码:A
文章编号:1009-3044(2019)08-0265-04
From Hadoop to Spark Technology Innovation
QUAN Zhao-heng,LI Jia-di
(School of Computer Science, Southwest Petroleum University, Chengdu 610500, China)
Abstract: With the rapid development of Internet technology, human society has gradually entered the era of big data. The generation of massive data has brought new challenges to modern humans. Encourage people to research and discover new technologies and means to solve the problems brought by big data. Hadoop and Spark technology are produced in this context, and currently in the various fields of people's lives, they are inseparable from the support of these two technologies. This paper mainly focuses on these two technologies, and analyzes the development and problems of these two technologies according to the time sequence of technology generation.
Key words: big data; big data technology; hadoop; spark
1 引言
我们生活在数据的时代,我们每天在手机或者电脑上浏览的网页、收到的各种消息以及看的视频、听的音乐都会产生数据,都会存储在我们的电脑或者手机上。数据的产生是相当容易的,但对于大量数据的存储与处理,发现其中的价值,为社会创造更多的价值却是我们正在面临的问题。
随着互联网等信息技术的发展,越来越多的TB、PB甚至FB级别的数据产生,Hadoop与Spark作为当今大数据处理的主流平台,已经在各个领域广泛使用[1, 2]。Hadoop作为最早的大数据处理框架,像MapReduce、HDFS等Hadoop生态圈的开源项目至今仍然是处理大数据的必不可少的工具,但是随着越来越多机器学习、图计算等应用的出现,大数据平台不仅要求能够处理大规模的数据,还对效率有了一定的要求,因此Spark就由此而生[3, 4]。
2 Hadoop
Hadoop作为最早的大数据处理框架,在大数据领域一直沿用至今,说明它有自身天然的优点。Hadoop主要由MapReduce计算模型与HDFS存储模型两部分组成,优点主要有低成本、高可靠、可扩展等,低成本主要是因为Hadoop集群主要是部署在那些价格低廉的普通PC机上;Hadoop可以通过配置文件决定数据的存储副本,当由于某些原因导致数据丢失时,Hadoop集群可以自动恢复,这个保证了它的高可靠性;可扩展就是集群的节点可以根据实际需求不断地扩展。相比优点,Hadoop的缺点也是非常明显的,MapReduce计算模型是一种基于数据集的计算模型,它的数据输入输出方式是从物理存储上加载数据,然后操作数据,最后再写入物理存储设备,如果有一个复杂的作业,这样频繁的磁盘写入写出会使得效率特别的低,甚至导致作业执行失败。因此,Hadoop主要應用在那些对效率要求不高的批处理作业。
2.1 Hadoop1.0
Hadoop 1.0指的是版本为Apache Hadoop 0.20.x、1.x或者CDH3系列的Hadoop,由分布式存储系统HDFS和分布式计算模型MapReduce组成,其中HDFS由一个管理节点NameNode和多个物理存储节点DataNode组成,MapReduce由一个JobTracker和多个TaskTracker组成[5]。
2.1.1 MapReduce计算模型
在Hadoop1.0中,MapReduce由两个阶段组成:Map阶段和Reduce阶段,对于一个作业,不管其简单或复杂,都可以将其转换为一个或多个MapReduce来完成。一次MapReduce需要从物理存储设备进行一次读出写入,MapReduce由map()和reduce()两个函数组成,map()函数以key-value的格式从物理存储设备上读入源文件,并以key-value的格式输出,reduce()函数以同样的形式从map()函数中读取数据,并最终将处理后的数据以key-value的格式将数据写入到物理存储设备,这里所说的物理存储设备就是随后要说的分布式文件系统HDFS[6-8]。
如图1是Hadoop1.0中MapReduce计算模型的整体框架图:
2.1.2 HDFS分布式存储系统
分布式文件系统HDFS是Hadoop大数据计算框架的一个重要组成部分,在目前的大多数新出现的大数据框架中也沿用了HDFS这种价格低、可扩展、高可靠的持久层工具。Hadoop1.0中,HDFS由一个NameNode管理节点和一个或多个DataNode存储节点组成,NameNode节点是整个HDFS分布式文件系统的管理节点,上面存储着DataNode节点存储数据的元数据信息,它接收用户的请求,并向DataNode发出请求,完成相关操作;除此之外,它还保证了整个HDFS系统的高可靠性。HDFS中还有一个SecondaryNameNode节点,它的主要作用是协助NameNode节点,来完成将用户修改内容保存到磁盘中[9]。
2.2 Hadoop2.0
Hadoop 2.0指的是版本为Apache Hadoop 0.23.x、2.x或者CDH4系列的Hadoop,主要由分布式文件系统HDFS、计算模型MapReduce和资源管理器YARN三个部分组成,Hadoop2.0的出现改善了Hadoop1.0中存在的一些问题,使得Hadoop大数据框架更加完善,这也是Hadoop框架沿用至今的原因[10]。
2.2.1 Hadoop1.0存在的问题
在Hadoop1.0中,HDFS只有一个NameNode节点,对于Hadoop集群来说,NameNode管理着整个文件系统,如果由于一些原因使得NameNode挂掉的话,整个HDFS分布式文件系统就会彻底瘫痪了,这就是Hadoop1.0中存在的NameNode单点故障问题;NameNode是整个HDFS分布式文件系统的管理节点,负责与用户的交互,它里面存储着整个文件系统的元数据信息,随着互联网时代的快速发展,数据的产生量也日益增长,这也使得集群的规模不断扩大,当我们的NameNode无法在内存中加载全部元数据信息的时候,集群也就会出现各种各样的问题,我们将这条概括为NameNode的内存容量不足的问题;MapReduce1.0中采用基于slot的粗粒度的资源分配模型,分为Map slot和Reduce slot,而且这两者是不可以相互共享的,我们都知道MapReduce作业是有先后顺序的,因此在执行Map步骤时,Reduce slot资源是闲置的,相反,在执行Reduce步骤时,Map slot又是闲置的,这样就使得资源利用率低,造成资源浪费;对于Hadoop1.0,MapReduce中JobTracker职责过多,既需要分配资源,又需要跟踪监控每一个Job下的tasks的运行情况,这往往造成了内存以及资源的极大浪费,对于实时性的作业和批处理作业,在Hadoop1.0中需要搭建不同的集群环境,每个集群环境运行不同的作业类型,这往往导致了集群的资源利用率并不高,在实际的业务中,MapReduce处理的主要业务为有些延迟的批处理的作业,也就是说由于1.0中MapReduce的设计导致集群资源利用率并不高。
2.2.2 内存限制问题的解决
针对Hadoop1.0中单个NameNode存在内存寿险的问题,在Hadoop2.0中提出NameNode联邦的概念,也就是NameNode Federation,这样原来由一个NameNode管理的系统,现在由多个NameNode来管理,不仅解决了内存限制问题,也使得数据的安全性进一步得到保证[11]。
2.2.3 单点故障问题的解决
针对1.0中NameNode的单点故障问题,在2.0中引入了新的HA机制:即如果Active的NameNode节点挂掉,处于Standy的NameNode节点将替换掉它继续工作[12]。
2.3 新一代资源管理框架Yarn
Yarn是Hadoop2.0中的资源管理系统,它是一个通用的资源管理模块,可为各类应用程序进行资源管理和调度。Yarn不仅限于MapReduce一种框架的使用,也可以供其他框架使用,比如Tez、Spark、Storm等,它的引入大大提高了集群的利用率[13, 14]。
2.3.1 Yarn产生的背景
针对MapReduce1.0中出现的资源利用率低和集群扩展性差的问题,在Hadoop2.0中引入了Yarn来替代JobTracker,将它原有的资源管理和任务调度分别由ResourceManager、ApplicationMaster这两个工具来分担[15, 16]。
2.3.2 YARN的基本组成
Yarn的整体结构延续了Hadoop生态圈一贯的风格,仍然采用的是主从结构,下面是它的组件及功能:
(1)ResourceManager充当master的角色,负责整个集群的资源管理和调度以及ApplicationMaster的启动;
(2)NodeManager充当slave的角色,负责单个从节点的资源管理和任务执行;
(3)ApplicationMaster是对于每个App而言的,负责应用程序执行时的资源获取以及任务分配;
(4)Container是Yarn中的资源的抽象,它是对Hadoop1.0中slot的改进,它封装了集群中的多维度资源,例如内存、CPU、磁盘、网络等。
如图5所示,是Yarn的整体框架图:
3 Spark大数据计算模型
Apache Spark是在Hadoop MapReduce計算模型基础上发展而来的一种基于内存的大数据计算框架[2, 17]。
3.1 Spark计算模型产生的背景
Spark的出现是为了改善Hadoop MapReduce在实际应用中出现的这样或那样的问题,MapReduce在执行一个App时,既要写Map,又要写Reduce和驱动类,当需求发生变动时需要大规模修改代码;MapReduce基于进程,进程的启动和销毁要花费时间;频繁的写入写出磁盘,不适合做迭代处理;每个阶段都必须排序;只适合离线计算,不适合做实时处理。
3.2 Spark快的原因
Spark是基于内存的计算模型,有一个误区,Spark 是基于内存的计算,所以快,这不是主要原因,Spark在其他方面的优化也起到了很大的作用。
3.2.1 基于内存的计算模型
Spark与MapReduce计算模型在执行任务计算时都是在内存中进行的,区别是Spark会将作业执行时的中间数据缓存到内存中,而MapReduce是将中间数据持久化的磁盘中,在一个基于大数据平台计算的作业,巨大的数据量从内存中读取与从磁盘中读取,对于速度来说完全不是一个等级的[18]。
3.2.2 DAG计算模型更加高效
Spark将每个作业都抽象为一个DAG图,通过DAG,Spark可以对整个作业的计算流程进行优化,对于不需要进行shuffle的计算,可以进行操作合并;对于shuffle操作,在DAG内部进行了stage的划分,这样使得资源的使用更加高效合理,避免了因为资源等待造成的效率上的降低[19, 20]。
3.2.3 基于粗粒度的资源调度
在资源申请和调度方面,Spark是基于粗粒度的,而Mapreduce是基于细粒度的。Spark的粗粒度资源申请是在App执行完之前就将所有资源申请完毕了,task执行时不需要自己去申请资源,这样task执行的相对较快,整体的速度也提高了;MapReduce的细粒度资源申请一开始不会将资源申请完毕,而是由task执行时,自己申请资源,task执行完毕后资源立即释放,这样task执行的较慢,整体的速度也就相对较慢。
3.2.4 JVM优化
在MapReduce计算模型中,每启动一个task便会启动一次JVM,也就是启动了一个进程;而Spark是将一个TaskSet提交给Executor执行的,启动一个Executor时启动了一次JVM,在Executor维护这一个线程池,每个task是交给一个线程执行的。每次启动JVM时就需要几秒到几十秒的时间,那么在大多数大数据平台下的作业中,task的数量是很多的,这样在效率上这两种计算模型就会差很多。
4 结论
目前大数据技术在各个领域已经有了具体的应用,经过这么多年技术的不断发展与进步,大数据技术已经有了很大的改善。本文主要以Hadoop与Spark两种大数据技术为代表,介绍了它们之间的相互联系以及它们的发展历程,使我们可以清楚地看到技术发展的一个历程。但是,随着社会的发展和新鲜事物的不断涌出,新的大数据技术难题会不断出现,新的技术也会不断产生。相信在未来的生活中,大数据技术会为人类创造出更多的财富。
参考文献:
[1] 周敏奇, 王晓玲, 金澈清, 等. Hadoop权威指南[M]. 清华大学出版社, 2011.
[2] 王磊, 时亚文. 基于Spark的大数据计算模型[J]. 电脑知识与技术, 2016,12(20):7-8.
[3] 郝树魁. Hadoop HDFS和MapReduce架构浅析[J]. 邮电设计技术, 2012(7):37-42.
[4] White T. Hadoop: The Definitive Guide[M]. 2011.
[5] 尧炜, 马又良. 浅析Hadoop 1.0与2.0设计原理[J]. 邮电设计技术, 2014(7):37-42.
[6] DEAN, Jeffrey, GHEMAWAT, et al. MapReduce: A Flexible Data Processing Tool[J]. Communications of the Acm, 2010,53(1):72-77.
[7] 董西成. 深入解析MapReduce架构设计与实现原理[M]. 机械工业出版社, 2013.
[8] 金伟健, 王春枝. 适于进化算法的迭代式MapReduce框架[J]. 计算机应用, 2013,33(12):3591-3595.
[9] Liu J, Li B, Song M. THE optimization of HDFS based on small files: IEEE International Conference on Broadband Network & Multimedia Technology, 2011[C].
[10] Thusoo A, Sarma J S, Jain N, et al. Hive - a petabyte scale data warehouse using Hadoop: IEEE International Conference on Data Engineering, 2010[C].
[11] Mackey G, Sehrish S, Wang J. Improving metadata management for small files in HDFS: IEEE International Conference on Cluster Computing & Workshops, 2009[C].
[12] 蔡斌, 陳湘萍. 深入解析Hadoop Common和HDFS架构设计与实现原理[M]. 机械工业出版社, 2013.
[13] Murthy A. Apache Hadoop YARN: Moving Beyond MapReduce and Batch Processing with Apache Hadoop 2, 2014[C].
[14] 周维. Hadoop 2.0-YARN核心技术实践[M]. 清华大学出版社, 2015.
[15] 董春涛, 李文婷, 沈晴霓, 等. Hadoop YARN大数据计算框架及其资源调度机制研究[J]. 信息通信技术, 2015(1):77-84.
[16] 董西成. Hadoop技术内幕:深入解析YARN架构设计与实现原理[M]. 机械工业出版社, 2013.
[17] Zaharia M, Chowdhury M, Franklin M J, et al. Spark: cluster computing with working sets: Usenix Conference on Hot Topics in Cloud Computing[C], 2010.
[18] 孟红涛, 余松平, 刘芳, 等. Spark内存管理及缓存策略研究[J]. 计算机科学, 2017,44(6):31-35.
[19] 廖彬, 张陶, 于炯, 等. Spark DAG优化MapReduce协同过滤算法[J]. 中山大学学报(自然科学版), 2017,56(3):46-56.
[20] 殷荣. 基于DAG模型的离线数据处理引擎的设计与实现[D]. 哈尔滨工业大学, 2016.
【通联编辑:梁书】