基于Hadoop的研究及性能分析.docx
- 文档编号:10200080
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:14
- 大小:137.57KB
基于Hadoop的研究及性能分析.docx
《基于Hadoop的研究及性能分析.docx》由会员分享,可在线阅读,更多相关《基于Hadoop的研究及性能分析.docx(14页珍藏版)》请在冰豆网上搜索。
基于Hadoop的研究及性能分析
基于Hadoop的研究及性能分析
摘要
在大数据到来的今天,本文首先介绍了Hadoop及其核心技术MapReduce的工作原理。
详细讨论了Hadoop推测执行算法和SALS推测执行算法并对它们的性能进行分析。
最后,分析了MapReduce框架的通用二路连接算法RSJ。
为了提高性能,提出了一种基于DistributedCache的改进算法,通过减少mapper输出的数据来达到优化的目的。
关键字:
HadoopMapReduce性能算法
Abstract:
Intheeraofbigdata,thispaperintroducesHadoop,MapReduceanditscoretechnologyworks.IhavediscussedtheHadoopspeculativeexecutionalgorithmsandSALSspeculativeexecutionalgorithmandanalyzedtheirperformance.Finally,IanalyzedthemonRoadJoinAlgorithminMapReduceframework.Toimproveperformance,IproposeanimprovedalgorithmbasedDistributedCachebyreducingthemapperoutputdatatoachieveoptimizationpurposes.
Keywords:
Hadoop;MapReduce;Performance;Algorithm
1、绪论
1.1、背景
伴随Internet和Web技术的飞速发展,网络日志、互联网搜索索引、电子商、社交等技术的广泛使用带来了数据量的急剧增长。
计算机技术在各行各业的普遍使用也促使的数据的产生,如用于测量和传输有关位置、震动、湿度、温度的传感器所产生的海量数据。
大数据时代真的来了吗?
据[1]中统计显示所有企业每天的信息存储量高达2.2ZB,其型企业平均每天产生的信息量达10WTB,而中小企业平均每天产生563TB的数据量。
预计明年大型企业产生的数据量将增长67%,中小企业数据量的增长则高达178%。
因此,在2012年年末,中国工程院院士邬贺铨指出:
“在过去短短的18个月,中国移动互联网流量增加了10倍,占全球互联网流量的10%,成为名副其实的世界数据中心。
因此,中国已经步入了“大数据”时代。
大数据主要有四个典型特征:
(1)海量:
目前各行各业面临着数据量的大规模增长。
例如,IDC最近的报告预测称,到2020年,全球数据量将扩大50倍之多。
(2)多样性:
数据不单单以结构化数据形式存在。
目前,半结构化数据和非结构化数据也已经占了数据总数相当大的一部分。
数据多样性的增加主要由包括网络日志、社交媒体、互联网搜索、手机通话记录等数据类型造成的。
(3)高速:
指的是需要实现对大数据的快速处理和分析任务,以实时满足用户需求。
(4)易变性:
大数据具有多层结构,这意味着大数据会呈现出多变的形式和类型。
由于大数据的上述几种特性,使得采用传统数据库技术来处理大数据存如下一些问题:
第一,平时使用的计算机存储容量和计算速度都无法满足大数据的存储和计算要求。
虽然可以根据数据的大小采取增强机器配置的方法来满足需求,但是代价是及其昂贵的;
第二,传统关系型数据库只能用于存储和查询结构化的数据类型,而无法满足多样化数据的存储;
第三,传统数据库系统的分析处理能力也无法满足快速处理大数据的处理请求。
正是因为传统技术有着这些方面的不是,用于处理数掘的Hadoop技术诞生了,Hadoop是上述解决方案的实现框架。
Hadoop平台Apache是开源设计的,它是部署在廉价的计算机集群上的一个分布式计算框架。
与PC机类似,Hadoop也为应程序提供一组稳定、灵活、可靠的接口。
Hadoop括许多子项目,如HDFS、HBase、MapRedeuce等。
其中分布式文件系统(HDFS)主要是用来存储非结构化数掘的;HBase用来存储海量半结构化数据的;MapReduce作为一种并行编程模型,可以很好的实现大数据时代的计算任务。
所以木文将对Hadoop进行深入的研究,并对它的一些性能进行分析,进而让我们更了解该系统。
本文的研究意义如下:
(1)随着数据量的爆炸式增长,如何有效的存储海量数据、如何高效的从现存海量数据中获得所需信息,对经济、社会、政治发展都具有重要的意义。
(2)Hadoop是为存储、处理大数据而产生。
Hadoop框架将数据的存储和处理集成于一体,因此在大数据时代研究Hadoop具有重要的理论意义。
(3)HDFS和MapReduce作为Hadoop核心部件,对它们进行研究和优化,可以更好的理解Hadoop运行机制,在一定程度上提高Hadoop系统的整体性能,对Hadoop在大数据环境中的使用具有重要的意义。
1.2、国外的研究现状
在大数据时代,海量数据存储技术具有重大的研究意义和市场价值,随着数据量的增长和数据结构复杂度的提高,存储技术不断更新换代,存储产品也层出不穷。
为了降低使用成本,目前的分布式系统趋于建立在廉价的服务器、PC或普通存储设备之上。
由于海量数据存储系统的规模巨大和系统设计复杂,服务器、设备故障、软件出错的频率较高因此如何构建自组织能力强、数据可靠性高和可伸缩性好的系统成为存储系统设计的关键任务。
经过近几十年的探索、实践和研究,人们发现基于智能存储设备的存储技术符合上述条件,所以该技术也成为了目前存储技术研究的焦点。
目前,国外研究中对于基于MapReduce框架数据集连接(join)优化问题已经存在了一些解决方案:
文献[2]中作者针对等连接关系型任务提出了一种新的编程模式Map-Reduce-Merge。
该模型除了含有Map和Reduce阶段之外,还添加了一个Merge阶段。
该模型的思想是:
当处理连接任务时设置了多个Reduce节点,则Reduce阶段输出的结果分散在集群中的不同节点上。
因此,Merge阶段的任务把Reduce阶段输出的、分布在多个节点上的结果进行合并,从而得到最后的结果。
但是,这篇文章仅仅提出了思想,并没有提出相应的方法来实现这一思想。
文献[3]提出一种仅仅使用一个MapReduce任务就能够完成多路连接任务的方法。
它的主要思想是:
以一对多的形式将Map端中满足连接条件的元组都发往同一的Reduce端,然后在Reduce端进行连接操作。
然而,这篇文章重点就如何减少Map端发往Reduce的数据量进行了研究,并没有给出具体的实现。
文献[4]中提出了一种基于预排序的多路连接算法。
算法思想是首先将连接任务划分成多个连接的子任务,然后对每个子任务进行预处理。
预处理的作用是将每个子任务所要连接的两个表按照连接属性值进行排序,使得具有相同属性值的元组能够存储在同一个Map点上,这时候就可以在Map阶段完成多个子连接任务,而在Reduce阶段,将各子任务的结果合并。
这算法的不是之处在于对表数据的预排序也会产生大量的网络开销。
2、Hadoop及MapReduce介绍
2.1、Hadoop简介:
Hadoop最早是作为一个开源搜索引擎项目Nutch的基础平台而开发的,后来随着项目的进展,Hadoop被作为一个单独的开源项目进行开发。
Hadoop也括许多子项目,如,HBase、Pig、Hive、HDFS和MapReduce等,其中最核心纽成项目是HDFS和MapReduce。
HDFS是一种分布式存储技术,为Hadoop并行计算提供了数据支持。
MapReduce是一种并行编程模型,包括Map和Reduce两个部分。
Map和Reduce的作分别是作业的分解与结果的汇总。
MapReduce和HDFS都时采用主从式架构,通过构建主节点来来屏蔽从节点的复杂的底层结构。
同时,该主从式架构简化了MapReduce使用的文件目录的映射。
Hadoop作为一个开源的软件平台使得编写和运行用于处理海量数据的应用程序更加容易。
Hadoop是MapReduee的实现,它使用了Hadoop分布式文件系统(HDFS)[5]。
MapReduce将应用切分为许多小任务块去执行。
出于保证可靠性的考虑,HDFS会为数据块创建多个副本,并放置在群的计算节点中,MapReduee就在数据副本存放的地方进行处理。
作为一个分布式系统平台,Hadoop具有以下一些优势:
可扩展性:
Hadoop可以可靠的存储和处理Petabytes级别的数据。
经济性:
Hadoop将数据分布到由廉价Pc机组成的集群中进行处理,这些集群可以由成千上万个节点组成。
有效性:
通过数据分发,Hadoop可以在不同的节点上并行处理数据,这使得数据处理过程大大提速。
可靠性:
Hadoop自动维护一份数据的多个拷贝并自动将失败的计算任务进行重新部署。
2.2、Mapreduce简介
2.2.1、Mapreduce编程框架
HadoopMapReduce也是一个Master/Slave式的架JobTracker只有一个,并且为主服务器(如同HDFS中的NameNode),主要负责任务的调度和管理工作。
TaskTracker可以有多个,每个TaskTracker运行在一个节点上,是真正执行任务的地方。
JobTracker负责把Map和Reduce任务分配给空闲的TaskTracker进行处理。
如果在执行过程中某个TaskTracker出现故障,则JobTracker负责把该节点上的任务分配给其他的
TaskTracker任务重新运行。
下面首先详细介绍了MapReduce模型的设计原理,然后介绍Hadoop系统中MapReduce的工作流程。
2.2.2、Mapreduce工作原理
根据上述思想MapReduce被抽象成Map和Reduce两个阶段。
在实际的编程实现中,程序员只需要实现这map()和reduce()两个函数即可,其中Map阶段对应分的过程。
MapReduce编程框架将为输入数据集的每个分片分配一个Map任务,并且在集群中各任务对分片的处理是并发的。
每一个Map任务的输入为对应分片中key/value的集合,根据用户自定义的map()方法生成中间结果key/value的集合,再将中间结果中相同key的value进行合并传递给reduce()方法。
然后,再根据用户自定义的reduce()方法对传进来的具有相同key的value集合进行处理,得到最终的结果。
如下图1中给出了MapReduce的流程示意图。
从图中看到除了上述介绍的Map和Reduce阶段之外,中间还有一个biner阶段,不过这一阶段是可选择的。
图1Mapreduce的执行流程图
3、Hadoop推测执行算法的研究及性能分析
为了提高Hadoop作业的执行效率,Hadoop会采取--些优化策略,其屮Hadoop推测执行算法就是提高作业效率的一种很有效的策略。
但是在异构环境下,不建议启动Hadoop推测执行算法。
因为在异构环境下启动推测执行策略不仅不会提高作业的效率,反而会降低作业的效率。
木节将对Hadoop推测执行算法进行研究、分析,使其在异构环境中提Hadoop作业执行的效率。
3.1、Hadoop推测执行算法原理
MapReduce将待执行的作业分削成一些小分片,并行执行这分片,提高作业的运行效率,使得作业的整体运行时问小于顺序运行时间。
当作业被提交到MapReduce后,该作业的执行过程对用户来说就是透明的,但是如果该作业分片遇到的执行节点可用执行能力较低,这些作业分片被称为抄队者。
为了使更快的完成计算,MapReduce会启动另外一个运行较快的数掘节点运行掉队者,以缩短该作业在MapReduce中的执行时间。
将MapReduce的这种机制称为推测执行(speculationexecution),被推测执行的任务称为后背任务。
掉队者产生的原因很多,如硬件故障或配置错误等。
俱Google统计,在集群同构的情况下,使用推测执行可以将响应时间提高到44%。
然而,而对这种现存的构集群,改排测机制的效率不复存在。
据调查[6],在构环境中使用推测执行算法,会造成过度执行掉队者任务,导致具有比不执行该算法有更差的性能。
有些实验甚至出现80%的正常任务被判断为掉队者而被重新执行。
Hadoop推测执算法的核心思想是:
(1)使用(0,1)之间的分数作为任务的进度分数,使用该分数值标识任务的进度情况。
Hadoop推测执行算法的进度分数包括Map进度分数和Reduce进度分数两种情况,在Map阶段中,执行进度=已完成的数据/输入的数据。
在Reduce阶段中,将任务分为输入的数据复制阶段、排序阶段、归并阶段,每个阶段均占任务进度的1/3。
在任务的各个阶段中都会计算出一个进度分数,该分数代表着任务完成的情况。
例如,当任务完成到排序的一半时,该任务的进度分数为1/3+(1/2)*(1/3)=1/2,当完成归并的四分之一时,该任务的进度分数为1/3+1/3+(1/4)*(1/3)=1/4。
(2)根据定义的阈值判断掉队者
当作业的所有任务都开始执行时,JobTracker会分别计算出Map和Reduce的平均进度分数,并设置阀值,定义该阀值为平均进度的分数值减去0.2,如果某个任务同时满足进度分数低于阀值和至少执行了一分钟这两个条件,那么便标记该任务为掉队者。
(3)使用Hadoop推测执行算法执行后备任务
JobTracker会启动一个效率高的执行节点执行该备份任务,若其中一个先执行完,另一个将被杀掉。
因为在同构环境中,Hadoop调度程序的特点是某个后备任务在某个时刻只会被执行一次,且同一批任务基本在同一时间段开始和结束,其中的掉队者是在该批任务结束后被推测执行,所以Hadoop使用上述方法不会出现重复执行掉队者的情况,故使用该阀值判断掉队者的方法是合理的。
3.2、SALS推测执行算法
在Hadoop推测执行算法中,如果系统面临着负载过量的情况,但节点仍有不断的新任务请求,将造成系统中所有的工作节点超负荷的状态,进而导致作业响应时间的降低。
在每个工作节点上运行的任务都会相互竞争资源,最终使得任务获得的系统资源,不能快速的完成任务。
此时,将不能快速完成的任务标记为掉队者,随着掉队者数量的增加,需要执行的后备任务也不断增多,进一步加剧了系统的负载,形成一个恶性循环,严重影响Hadoop系统的性能。
面对Hadoop推测执行机制的缺点,冇人提出了使用自适应负载调度调算法(SALS)进行改进[7],该算法定义了用于存放任务信息的TaskQueue队列和用于存放节点信息的Queue队列。
3.3、Hadoop推测执行算法和SALS算法性能分析
3.3.1、Hadoop推测执行算法性能分析
在同构环境中使用Hadoop推测执行算法可以很大的提高Hadoop处理数据的效率[8],在该环境卜.默认满足的条件如下所示:
①每个节点都是按照同样的速度处理任务
②在整个运行中,每个任务按相同的速率运行
③运行后界任务+会产生时问和资源的消耗
④Map阶段任务执行的进度使用已完成的数据/输入数据来表示,Reduce阶段中,括复制、序和归并三个阶段,设置每个阶段均占整个任务完成时问的1/3用于表示任务进度
⑤每个作业都是以批为中.位完成,所以如染出现的进度分数较小任务时,就判定该任务为掠队者
但是在异构环境中,上述条件是不成立的,故Hadoop推测执行算法不适合应用到异构环境中。
如见在异构环境启动该推测执行机制,则会造成以下后果:
①有些结点速度慢的原因可能由错误导致的,也可能是由其他原因导致的,如虚拟化环境、硬件版本不兼容。
故任务的执行速度差好较大。
②出现竞争资源和消耗时问的情况。
在一台计算机上运行多个虚拟机的虚拟坏境中,Hadoop调度机制中使用一个固定的阀值来判断掉队者,这会导致在同一时刻出现大展的掉队者,与正常的任务抢资源,造成资源的短缺,增加作业完成的时间,降低Hadoop的性能。
③在异构的环境中节点可能存在差异,执行的任务可能不是同一批次的。
因为在整个执行过程中,可能会出现,旧批次中的某个任务比新批次小的某个任务进度分数高,但是旧任务运行的速度比新任务运行的逨度要慢,在Hadoop推测执行调度备份任务时可能会先调度新任务,造成有些掉队者仟务一直无法执行。
所以,Hadoop的推测执行仅在同构环境下可以发挥其优势[9]。
如果在异构环境中满足这些假设条件,将得不到的真正的掉队者,同时频繁的推测执行后茶任务会占据大量的系统资源,严重降低Hadoop执行作业的性能。
3.3.2、SALS算法性能分析
为了解决Hadoop推测执行算法能在异构环境中应用的问题,有人提出使用自适应负载调节算法(SALS)的方法来改进Hadoop推测机制,相比于Hadoop推测机制的在异构环境中的无效性,SALS在一定程度上提高了异构环境中Hadoop的性能。
但是经过对该算法的分析,发现该算法存在以下问题:
①将所有任务都放到TaskQueue队列中;造成资源的浪费当收到节点请求任务的信息后,SALS算法将计算所有任务的剩余执行时间,并将所有任务进行排序,放到TaskQueue队列中。
当Task数据量非常大的时候,TaskQueue队列中的数据量将很大,不仅浪费存储空间,也会增加读取操作的复杂性。
②忽略Reduce任务;最初MapReduce框架将map任务和reduce任务均设定为等效,使用该算法忽略了任务中的另一类任务即(Reduce任务),将会造成系统负载不准确。
在配置Hadoop环境时,会启动适量的Map和Reduce。
为了使Map的输出得到及时的处理,Reduce的数量会随着Map数量的增加而增加。
所以,考虑到系统负载平衡时,Reduce任务也是不能被忽略的。
③仅采用Map处理的数据量作为衡量系统负载的标准;计算某一时刻的系统负载量时,需要计算所有Map处理数据量的大小。
由于计算的是每个小任务的数据量之和,计算量较大,将会造成CPU资源的浪费,以及延迟计算的时间。
经过研究发现可以使用执行任务的数量来代替执行的数据量作为系统的负载,这样可以减小系统计算量,节省CPU资源。
4、二路连接优化方法
4.1、ReduceSideJoin算法实现
针对基于MapReduce框架的通用二路连接算法RSJ的不足,有人提出了一种基于DistributedCache的改进优化算法。
优化算法的思想是在进行RSJ算法进行表关联之前,将其中一个表的连接属性的值提取出来并且经过Bit-map压缩成较小的“背景”数据存放到一个小的文件中,然后经由DistributedCache机制传输到各个节点上。
再进行RSJ算法实现二个表连接时,在Map阶段可以通过读取“背景”数据来过滤掉另一表中不满足连接条件的元组,从而减少mapper输出的数据来达到优化的效果。
ReduceSideJoin(以下简称RSJ)方法是基于MapReduce框架实现二路自然连接的一种通用方法,由于使用MapReduce编程框架实现二路连接任务是在Reduce端实现的连接操作,由此而得名的。
图2为使用RSJ算法对表Customer与Orders执行连接操作的流程图。
图2ReduceSideJoin执行流程图
由图2可知,在Map阶段,mapper接收来自两个文件Customer和Orders的数据。
每个mapper都已知它所处理的数据流来自哪个文件。
调用map()函数处理每个记录,map()函数的主要作用是将每个记录打包,具体实现是获取连接属性的值作为mapper输出中间结果的key值,将输入value中打上一个标签tag(用来表明数据来源)再作为中间结果的value。
例如:
图中将来自Customer的键值对的value中打上了标签C,而来自Orders文件的键值对的value中打上标签O。
然后OutputColloctor对象通过调用collect()方法将得到的新的key/value对输出到本地文件系统中。
然后就是Shuffle/Sort阶段的实现,由图可知该阶段的作用就是将mapper输出的中间结果集中key相等的key/value对能够发送到同一个Reduce中进行处理。
这里可以直接使用Hadoop中给的默认分区函数HashPartititoner。
该函数的实现根据key的哈希值与Reduce任务数的比值来决定key/value的分区。
由于哈希值相等的数值一定相等,因此表Customer和Orders中具有相同cus_id值的元组都会发送到同一个reducer节点。
在Reduce阶段,具有相同key的键值对以
4.2、二路连接方法瓶颈分析
相较于传统数据库技术来说,使用上述RSJ算法在分布式环境下处理大数据集连接任务时已经很大程度上提高了执行效率。
但是仍然存在着不是。
虽然系统分配Map任务时考虑了数据的局部原理,因此在分配Map任务时尽可能的将任务分配到数据所存储的节点上或则附近节点上进行处理,从而减少了网络中数据的传输。
但是,系统在分配Reduce任务时并没有考虑上述情况,所以Map任务和Reduce任务往往在不同的节点上执行的[10]。
因此,执行Reduce任务的worker机需要靠RPC从Mapworker所在主机的磁盘上拉取数据。
进行连接的表中往往存在不满足连接条件的数据,使用RSJ算法进行表关联时,这些不满足连接条件的数据都需要经过Map阶段转换为key/value对写入本地磁盘,然后再读出经过网络传送到Reduce阶段进行处理。
Customer与Order连接操作流程图中可以发现,Customer和Order中满足连接条件的元组(如cus_id为1和2)能够发送到同一Reduce端进行连接处理,同时在Customer中cus_id等于3的元组也通过网络发送到Reduce端,而此时Order中比没有满足连接条件的元组存在。
虽然,图3.1中只给出一个不满足连接条件元组,而在实际表连接操作中,关联表中这种不满足连接条件的元组是非常多的,因此会消耗大量的I/O和通信开销,成为RSJ算法的一个瓶颈。
4.3、基于DistributedCache二路连接算法的改进
Hadoop系统中提供了一个称为分布式缓存的机制,该机制的设计主要用于在集群中分发少量中等规模的文件,大小从几MB到几十MB。
它通常用于分发包含mapper节点所需要的“背景”数据的文件。
例如,如果使用Hadoop进行文档分类,就可以使用该机制在每个mappe节点上分发一个包含分类列表的文件,即“背景”数据。
使得所有mapper节点在进行分类任务时都可以获得分类列表的信息。
在Hadoop中用于实现上述机制的类为DistributedCache,使用这个类主要分为两个步骤:
第一步,在配置作
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Hadoop 研究 性能 分析