探讨云计算中大数据的MapReduce处理方法
扫描二维码
随时随地手机看文章
引言
随着互联网的不断发展,云计算也逐步成为各行各业的 热门名词了。云计算作为一项划时代的技术,拥有超级计算 能力和处理能力,用以应对用户对网络资源需求和利用的日益 增大。数据需求日益增长和积累标志着大数据时代已经到来。 大数据的出现引起了各行各界专业人士的密切关注,因此大数 据的管理技术也应运而生。在学术界中,专家们纷纷发布论文 来定义大数据,探讨大数据的处理方法及指出其所面临的挑 战。作为大数据处理的领头羊,Google公司于2004年提出的 MapReduce编程模型受到了大众的广泛关注。
1云计算技术简介
云计算是当今时代IT行业的热点话题,对它的定义各 行各界的专业人士纷纷提出自己的看法。云计算既不是产 品也不是技术,而是一种产生和获取计算能力方式的统称。 Wikipedia网站上给出的云计算(Cloud Computing)的定义是: 一种基于互联网的计算方式,通过这种方式,共享的软硬件 资源和信息可以按需求提供给计算机和其他设备。
云计算的主要特点包含超大规模、虚拟化、高可靠 性、高可扩展性和按需服务。主要形式有基础设施即服务 (Infrastructure as a Service,IaaS)即提供给用户的远程登录终 端界面(虚拟服务器)或者Web Service接口,平台即服务 (Platform as a Service,PaaS)即提供给用户的数据库连接串口 或者中间件部署界面,或者是应用的部署管理界面,软件即服 务(Software as a Service,SaaS)即提供给用户访问应用的客户 端或者Web界面。
2大数据
2.1大数据的定义
对于大数据,专家们目前并没有给出一个确切的定义。 Gartner分析师道格-莱尼(Doug Laney)认为:大数据需满 足三个特点:规模性(Volume)、多样性(Variety)和高速性 (Velocity),合称3V。2012年Gartner修改了对大数据的定义: “大数据是大量、高速,及/或多变的信息资产,他需要新型 的处理方式去促成更强的决策能力、洞察力与优化处理。”还 有提出4 V定义的,即在3V基础上增加一个新的特性一一真 实性(Veracity)。
2.2大数据的出现
互联网日益发达,人们需要的资源或数据量也越来越往 上攀升。数据库作为管理数据的主要方式也满足不了用户们的 需求了。从开始数据库的出现让用户管理数据的复杂度降低, 到Web 2.0时代的数据爆炸一一主要是新型的社交网络微博、 微信等的快速发展和苹果公司和安卓公司的智能手机、平板电 脑等新型移动设备的出现,再到无处不在的传感器设备的使 用,因为这些设备无时无刻不产生新的数据,从而导致大数 据的产生。
2.3大数据的处理流程
与以往的传统数据处理流程相比,大数据的基本处理流 程基本一样,主要区别在于:大数据包含的信息量大,节点多 且属于非结构化的数据,因此在每个处理环节中都需要采用 MapReduce,Dryad等方式进行并行处理。基本流程如图1 所示。
大数据中的 3V 特性包含着多样性,这意味着数据来源广泛、种类多,也说明数据采集需要利用多个数据库来接收数据。采集之后就是数据预处理,即需要对采集到的海量数据进行分析,保证数据的质量和可信度等。数据处理中的分析环节是大数据处理的核心部分,涉及到的数据量较大,系统资源利用率高,需要利用到分布式数据库来对采集到的海量数据进行进一步分析和分类汇总,进而满足用户的常见的分析需求。之后是数据挖掘,即主要是在现有采集到的数据用来进行基于各种算法的技术,从而起到预测的效果,实现一些高级别的数据分析需求。该过程的特点是数据挖掘的算法虽然复杂,计算量和数据量大,但算法的准确率不再是大数据的最主要的指标了。最后是结果展现,换而言之,就是对数据分析后得出的结果展示给用户参考,往往用户也更关心分析后的结果。最常用的的方法就是利用可视化技术,该技术也成功地被科学与工程计算领域采用。现今常被采用的可视化技术有标签云 (Tag Cloud)、历史流 (History Flow)、空间信息流 (Spatial Information Flow)。
3 MapReduce 模型
MapReduce 模型是一种云计算中的并行计算模型的主要研究对象。它通过基于云平台中的大数据进行挖掘,从而获取网页相关数据对其研究得出结果。完整的 MapReduce 执行过程如图 2 所示。
图 2 中,MapReduce 模 型 有 2 个 函 数 :Map 函 数 和Reduce 函数。MapReduce 模型首先获取用户需处理的数据进行 split,然后分别传送到 Map worker 进行处理。Map worker从输入中获得 <key,value> 对集合,然后 Map 函数执行该集合获得中间结果并存入本地硬盘。Reduce worker 先从本地硬盘上获取数据,然后对 <key,value> 中的 key 值进行排序。排序之后 Reduce 函数对这些排序好的对集合进行处理并输出最终结果。
4 MapReduce 的优点
MapReduce 编程模型能够在云计算的大数据处理一直处于领先地位,因为 MapReduce 实行的是分布式并行程序,通过编写简单高效的代码来解决复杂的工作。从图 2 可以看到,MapReduce 有着非常强大又简单的接口 Map 函数和 Reduce函数。
MapReduce 模型有着高度抽象性,程序员不需要关心大数据的具体细节,只需要实现 Map 函数和 Reduce 函数。在图 2 中,每一次 MapReduce 过程中,Map 任务之间是并行的,Reduce 任务之间也是并行的,但两者之间是串行的,并且和具体的节点数目无关,节点的增加或者减少都不会影响程序的执行,即 MapReduce 模型具有可扩展性、可靠性。同时在传统并行编程模型下,包含计算任务,数据同步和通信,对应于MapReduce 模型中的 Map 函数,Reduce 函数和 <key,value>。图 3 所示是传统并行程序与 MapReduce 关系的对应图。
Hadoop 是 Appach 用 java 实现的开源软件平台,可实现MapReduce 模型。并可对大数据进行分布式计算,而且采用的编程语言种类繁多,如 Python,Java,C 等。下面是一个简单的统计词频的 MapReduce 函数,可以看出,MapReduce的核心代码非常简单且易懂 :
map(String key, String value):
for each word t in value:
EmitIntermediate(t, "1");
reduce(String key, Iterator values):
int result = 0;
for each s in values:
result += ParseInt(s);
Emit(AsString(result));
在该例中,Map 函数中的 key 是文件名,value 为文件的内容,Map 函数逐个遍历单词,当遇到一个单词 t,就相对产生一个中间键值对<t,'T>,意味着单词t的数目加1 ; 然后MapReduce模型将键相同的键值对传给Reduce函数, Reduce函数接收到v,值就是以“1”的一串,个数就是单词 v的数目。最后这些单词的数目会被写到用户定义的位置,存 储在底层的分布式存储系统(GFS)。
MapReduce模型的不足
MapReduce模型适用于并行计算,为大数据的处理而设 计开发的。但MapReduce模型也存在许多不足之处。
在大数据密集应用的编程领域,传统的MapReduce模型 中的Map的输入源采用的是DFS,是相对的静态数据,并非 是一个最优的实现,而是使用了蛮力而非索引技术,同时缺 乏了数据库管理系统(DBMS)的大多数特性。比如DBMS中 的Schema的重要性,MapReduce模型缺少这样的预防垃圾 数据机制。
从图2中可以看出:MapReduce模型在处理大数据时, 由Map函数产生大量的中间数据,这些大量的中间数据同时 存在着数据不均衡的特性,比如key过于聚集或key值单一。 key过于聚集即不同key的个数虽然多,但经过映射后,过于 聚集在一起,key值单一即不同key的个数少。
同时,MapReduce模型也存在着性能问题。例如N个 Map实例产生M个输出文件,每个最后由不同的Reduce 实例处理,这些中间结果数据都会输出到运行Map函数机 制的本地硬盘。倘若N=1 000, M=500, Map阶段产生了 N*M=500 000个中间数据或文件。而当Reduce阶段开始时, 500个Reduce实例中,每个都需要读入1 000个数据或者文件, 并用类似FTP协议把它要的输入文件从Map实例运行的节点 上pull取过来。当同时有100的Reduce实例运行,那么2个 或2个以上的Reduce实例同时访问同一个Map节点来获取输 入文件,将导致了大量的硬盘查找,有效的硬盘运转速度至 少降低20%。
在上例中,N M的值都是普通数据(< 10 000), MapReduce模型针对的是大数据,N, M的参数远远要大于上 面的数值,而中间结果数据过大的话,将导致Reduce阶段的 数据倾斜。Reduce阶段的数据倾斜可能带来有的Reduce任 务处理的数据多,而有的Reduce任务处理的数据少,甚至没有。 最严重的是,有的Reduce任务处理的数据超出了本地可用存 储空间,导致整个MapReduce任务失败。
MapReduce模型的改进
MapReduce模型的不足说到底就是MapReduce模型的性能问题,Map/Reduce 的程序效率问题。Google 公司的Hadoop 系统采用了 Combiner 来提高 Map/Reduce 程序效率。Combiner 主要削减了 Map 阶段的输出以减少中间结果数据,进而为网络带宽和 Reduce 阶段减负。数据格式转换格式如下:
Map: (K1, V1) → list(K2,V2)
Combine: (K2, list(V2)) → list(K3, V3)
Reduce: (K3, list(V3)) → list(K4, V4)
插入Combiner 后,MapReduce 的数据流如图 4 所示。
实际上,Combiner 实例在 MapReduce 过 程中是可选的。但是,一个 Combiner 只能处理一个节点中的输出,这和Reduce 阶段有一些区别,Reduce 处理的是中间结果数据。
7 总 结
随着云计算的快速发展,数据和信息量都呈爆炸型增长,大数据也就走入大众的视线。大数据的到来方便了用户,但大数据的处理方法也面临着挑战。本文介绍了云计算和大数据的基本概念,主要探讨了 Google 公司的 MapReduce 模型的优缺点。现今国内外对大数据的相关研究也取得了一定的成果,Microsoft 公司也针对云计算服务器中的大数据研发了Dryad 模型,但就 MapReduce 模型来说,在大数据的处理方法方面存在着极大的挑战。