基于Hadoop的研究及性能分析

基于Hadoop的研究及性能分析
基于Hadoop的研究及性能分析

基于Hadoop的研究及性能分析

摘要

在大数据到来的今天,本文首先介绍了Hadoop及其核心技术MapReduce的工作原理。详细讨论了Hadoop推测执行算法和SALS 推测执行算法并对它们的性能进行分析。最后,分析了MapReduce 框架的通用二路连接算法 RSJ。为了提高性能,提出了一种基于DistributedCache 的改进算法,通过减少 mapper 输出的数据来达到优化的目的。

关键字:Hadoop MapReduce 性能算法

Abstract:In the era of big data, this paper introduces Hadoop, MapReduce and its core technology works.I have discussed the Hadoop speculative execution algorithms and SALS speculative execution algorithm and analyzed their performance.Finally, I analyzed the Common Road Join Algorithm in MapReduce framework.To improve performance, I propose an improved algorithm based DistributedCache by reducing the mapper output data to achieve optimization purposes.

Key words: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编程框架

Hadoop MapReduce 也是一个 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 阶段之外,中间还有一个 Combiner 阶段,不过这一阶段是可选择的。

图1 Mapreduce的执行流程图

3、Hadoop推测执行算法的研究及性能分析

为了提高Hadoop作业的执行效率,Hadoop会采取--些优化策略,其屮Hadoop推测执行算法就是提高作业效率的一种很有效的策略。但是在异构环境下,不建议启动Hadoop推测执行算法。因为在

异构环境下启动推测执行策略不仅不会提高作业的效率,反而会降低作业的效率。木节将对Hadoop推测执行算法进行研究、分析,使其

在异构环境中提Hadoop作业执行的效率。

3.1、Hadoop推测执行算法原理

MapReduce将待执行的作业分削成一些小分片,并行执行这分片,提高作业的运行效率,使得作业的整体运行时问小于顺序运行时间。当作业被提交到MapReduce后 ,该作业的执行过程对用户来说

就是透明的,但是如果该作业分片遇到的执行节点可用执行能力较低,这些作业分片被称为抄队者。为了使更快的完成计算,MapReduce会启动另外一个运行较快的数掘节点运行掉队者,以缩短该作业在MapReduce 中的执行时间。将MapReduce的这种机制称为推测执行(speculation execution),被推测执行的任务称为后背任务。掉队

者产生的原因很多,如硬件故障或配置错误等。俱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、Reduce Side Join 算法实现

针对基于 MapReduce 框架的通用二路连接算法 RSJ 的不足,有人提出了一种基于DistributedCache 的改进优化算法。优化算法的思想是在进行 RSJ 算法进行表关联之前,将其中一个表的连接属性的值提取出来并且经过 Bit-map 压缩成较小的“背景”数据存放到一个小的文件中,然后经由 DistributedCache 机制传输到各个节点上。再进行 RSJ 算法实现二个表连接时,在 Map 阶段可以通过读取“背景”数据来过滤掉另一表中不满足连接条件的元组,从而减少 mapper 输出的数据来达到优化的效果。

Reduce Side Join(以下简称 RSJ)方法是基于 MapReduce 框架实现二路自然连接的一种通用方法,由于使用 MapReduce 编程框架实现二路连接任务是在 Reduce 端实现的连接操作,由此而得名的。图 2 为使用 RSJ 算法对表 Customer 与 Orders 执行连接操作的流程图。

图 2 Reduce Side Join 执行流程图

由图 2 可知,在 Map 阶段,mapper 接收来自两个文件Customer 和 Orders 的数据。每个 mapper 都已知它所处理的数据

流来自哪个文件。调用 map()函数处理每个记录,map()函数的主要

作用是将每个记录打包,具体实现是获取连接属性的值作为 mapper 输出中间结果的key 值,将输入 value 中打上一个标签 tag(用来

表明数据来源)再作为中间结果的 value。例如:图中将来自Customer 的键值对的 value 中打上了标签 C,而来自 Orders 文

件的键值对的 value 中打上标签 O。然后 Output Colloctor 对象

通过调用 collect()方法将得到的新的key/value 对输出到本地文

件系统中。

然后就是 Shuffle/Sort 阶段的实现,由图可知该阶段的作用

就是将 mapper 输出的中间结果集中 key 相等的 key/value 对能

够发送到同一个 Reduce 中进行处理。这里可以直接使用Hadoop

中给的默认分区函数 HashPartititoner。该函数的实现根据 key

的哈希值与 Reduce任务数的比值来决定 key/value 的分区。由于

哈希值相等的数值一定相等,因此表 Customer和 Orders 中具有

相同 cus_id 值的元组都会发送到同一个 reducer 节点。

在Reduce阶段,具有相同key的键值对以

list>的形式作为reduce()函数的输入,reduce()

函数就可以实现将来自 Customer 与 Order 具有相同 key 的键值

对进行连接操作,并将最后的结果写入 HDFS 中。

4.2、二路连接方法瓶颈分析

相较于传统数据库技术来说,使用上述 RSJ 算法在分布式环境

下处理大数据集连接任务时已经很大程度上提高了执行效率。但是

仍然存在着不是。虽然系统分配 Map 任务时考虑了数据的局部原理,因此在分配 Map 任务时尽可能的将任务分配到数据所存储的节点上

或则附近节点上进行处理,从而减少了网络中数据的传输。但是,

系统在分配 Reduce 任务时并没有考虑上述情况,所以 Map 任务和Reduce 任务往往在不同的节点上执行的[10]。因此,执行 Reduce

任务的 worker 机需要靠 RPC 从 Map worker 所在主机的磁盘上拉

取数据。

进行连接的表中往往存在不满足连接条件的数据,使用 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,使用这个类主要分为两个步骤:

第一步,在配置作业时,调用静态方法 DistributedCache. addCacheFile()来设定要传播到所有节点上的文件。这些文件被指

定为 URI 对象,默认存放在 HDFS 上。当 JobTracker开始工作时,将取得 URI 列表,并在所有 TaskTrackers 中创建文件的本地副本。

第二步,在每个 TaskTracker 上的 mapper 中通过

调用静态方法DistributedCache.getLocalCacheFiles()来获

取本地副本所在本地文件的路径,就可以将所需数据读到本地内存

之中。

基于上述分布式缓冲机制的特性,本文提出一种基于DistributedCache 二路连接算法(以下简称 DRSJ),该算法的思

想是:在进行 Customer 和 Order 表关联之前,首先将较小表(例

如 Customer)中关联字段(cus_id)的所有信息提出来存放到另一个

小的文件中。然后,将该文件作为“背景”数据放在 Distributed Cache 中。因此,使用 RSJ 进行表关联操作时,在 Map 阶段处理Order 数据时就可以根据“背景”数据来过滤掉 Order 中 cus_id

不存在与“背景”数据中的元组,即过滤掉不满足连接条件的元组,从而减少数据的传输,达到优化的目的。但是 DRSJ 算法存在着不是。例如,如果从表 Customer 中提取出来的 cu_id 数量仍然非常大,已经达到 1000 万个(即“背景”数据非常大时),则需要在

网络中传输非常大的文件而消耗大量的网络传输时间。除此之外,

如此大的数据量可能无法一次性全部读入内存之中,使得在过滤表Order 中数据时需要不断的去磁盘中读取文件,增加了 I/0 时间消耗。这两个缺点会使得 DRSJ 算法相较于 RSJ 算法可能会产生更多

额外的时间开销。由于 DRSJ 算法的缺点是当数据量较大时“背景”文件太大而引起的,因此需要做进行改进,改进的思想是如何对DRSJ 算法中的“背景”文件进行压缩,从而减小因为“背景”文件

大而带来的开销。在海量数据处理中,Bit-map 经常被用来压缩整

型数据,因此本文使用的压缩技术为 Bit-map,之后将改进的算法

简称为 BDRSJ。

5、总结

大数据时代的到来,使得Hadoop技术得到了前所未有的发展。Hadoop作为-种开源的分布式处现架构,使得用户可以轻松的使用其

处理大数据时代的数据。所以本文在研究Hadoop的基础上,对Hadoop处理数据时的性能进行深入的研究、分析。并对Hadoop推

测执行算法和SALS推测执行算法进行了性能分析。

本文主要工作如下:

首先,研究了 Hadoop 框架的特点,力对Hadoop中的核心技术:MapReduce进行深入的研究。该算法的核心思想是将任务的剩余完

成时间大于0.2的任务判断为掉队者,避免遇到和使用进度值时出现

的盲目判断掉队者的情况;考虑Hadoop集群的异构性,使用性能好

的节点运行掉队者任务提高掉队者任务的执行速度;优先执行速度最

慢的任务,避免出现某个最慢掉队者总是得不到执行,影响任务的正

常执行;依据系统当前负载情况,动态的调节掉队者任务的执行数量,实现Hadoop系统的负载平衡。

其次,介绍了基于 MapReduce 框架的通用二路连接算法——Reduce Side join,基于 RSJ 算法的不足提出了一种基于DistributedCache 的改进优化算法(BDRSJ)。优化算法的思想是

在进行 RSJ 算法进行表关联之前,将其中一个表的连接属性的值提

取出来并且经过 Bit-map 压缩成较小的“背景”数据存放到一个小

的文件中,然后经由 DistributedCache机制传输到各个节点上。

再进行 RSJ 算法实现二个表连接时,在 Map 阶段可以通过读取

“背景”数据来过滤掉另一表中不满足连接条件的元组,从而减少mapper 输出的数据来达到优化的效果。

参考文献

[1]https://www.360docs.net/doc/0216610555.html,/cio/zhuanti/2012/bigdata.

[2] Hung-ehih Yang, Ali Dasdan, Ruey-Lung Hsiao,

D.Stott Parker. Map-Reduee-Merge: Simplified RelationalData Processing on Large Clusters. In Proceedings of the ACM SIGMOD Intemational Conferenee,Pages:1029-1040,2007.

[3] Afrati F, Ullman J. Optimizing joins in a map-reduce environment// Proc of EDBT10. New York; ACM,

2010:99-110.

[4] Lin Yuting, Agrawal D,Chen Chun, etal.Llama; Leveraging columnar storage for scalable join //Proc of SIGMOD'11, New York: ACM 2011.

[5] 陈全,邓倩妮。云计算及其关键技术[J]。计算机应用,2009,29(9):2562—2566。

[6] 周扬,Hadoop平台下调度算法和下载机制的优化:(硕士学位论文)。长沙:中南大学, 2012.05。

[7]佘影,乂斌,基于Hladoop的人规校数据交换的研究[D].北京邮电人学计算机学院,2011。

[8] 赵彦荣, 王伟平, 孟丹, 等. 基于 Hadoop 的高效连接查询处理算法 CHMJ [J],软件学报,2012,23(8):2032-2041。

[9]孙广中,肖锋,熊曦,《MapReduce模型的调度及容错机制研究》,微电子学与计算机,2007。

[10] Anand Rajaraman,Jeffrey David Ullan。互联网大规模数据挖掘与分布式处理:中文版[M]。王斌,译. 北京:人民邮电出版社,2012。

相关主题
相关文档
最新文档