首页 理论教育 了解MapReduce的功能和技术特点

了解MapReduce的功能和技术特点

时间:2023-06-28 理论教育 版权反馈
【摘要】:图7-2MapReduce功能示意图7.1.2.2MapReduce技术特征目前MapReduce可以进行数据划分、计算任务调度、系统优化及出错检测和恢复等操作,在设计上具有以下3方面的技术特征。MapReduce可以进行大规模数据处理,应用程序可以通过MapReduce在超过1 000个以上节点的大型集群上运行。

了解MapReduce的功能和技术特点

MapReduce通过抽象模型和计算框架把需要做什么与具体怎么做分开了,为程序员提供了一个抽象和高层的编程接口和框架,程序员仅需要关心其应用层的具体计算问题,仅需编写少量的处理应用本身计算问题的程序代码。

7.1.2.1 MapReduce功能

MapReduce功能是采用分而治之的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。MapReduce实现了两个功能,Map把一个函数应用于集合中的所有成员,然后返回一个基于这个处理的结果集;Reduce是对多个进程或者独立系统并行执行,将多个Map的处理结果集进行分类和归纳。MapReduce易于实现且扩展性强,可以通过它编写出同时在多台主机上运行的程序。

以图形归类为例,其功能示意图如图7-2所示,实现步骤如下:

(1)首先使用Map对输入的数据集进行分片,如将1个☆和1个分成1个数据片,将1个☆、1个△和1个○分成1个数据片等。

(2)然后将各种图形进行归纳整理,如把2个☆归成一类,3个○归成一类等进行输出,并将输出结果作为Reduce的输入。

(3)最后由Reduce进行聚集并输出各个图形的个数,如☆有2个,△有4个等。

图7-2 MapReduce功能示意图

7.1.2.2 MapReduce技术特征

目前MapReduce可以进行数据划分、计算任务调度、系统优化及出错检测和恢复等操作,在设计上具有以下3方面的技术特征。(www.xing528.com)

(1)易于使用。通过MapReduce这个分布式处理框架,不仅能用于处理大规模数据,而且能将很多烦琐的细节隐藏起来。传统编程时程序员需要经过长期培训来熟悉大量编程细节,而MapReduce将程序员与系统层细节隔离开来,即使是对于完全没有接触过分布式程序的程序员来说也能很容易地掌握。

(2)良好的伸缩性。MapReduce的伸缩性非常好,每增加一台服务器,就能将该服务器的计算能力接入到集群中。并且MapReduce集群的构建大多选用价格便宜、易于扩展的低端商用服务器,基于大量数据存储需要,低端服务器的集群远比基于高端服务器的集群优越。

(3)大规模数据处理。MapReduce可以进行大规模数据处理,应用程序可以通过MapReduce在超过1 000个以上节点的大型集群上运行。

7.1.2.3 MapReduce的局限

MapReduce在最初推出的几年,获得了众多的成功案例,获得业界广泛的支持和肯定,但随着分布式系统集群的规模和其工作负荷的增长,MapReduce存在的问题逐渐浮出水面,总结如下:

(1)JobTracker是MapReduce的集中处理点,存在单点故障。

(2)JobTracker完成了太多的任务,造成了过多的资源消耗,当Job非常多的时候,会造成很大的内存开销,增加了JobTracker失败的风险,旧版本的MapReduce只能支持上限为4 000节点的主机。

(3)在Tasktracker端,以Map/Reduce Task的数目作为资源的表示过于简单,没有考虑到CPU内存的占用情况,如果两个大内存消耗的Task被调度到了一块儿,很容易出现内存溢出。

(4)在Tasktracker端,把资源强制划分为Map Task和Reduce Task,如果当系统中只有Map Task或者只有Reduce Task的时候,会造成资源的浪费。

(5)源代码层面分析的时候,会发现代码非常难读,常常因为一个Class(类)做了太多的事情,代码量达3 000多行,造成Class的任务不清晰,增加Bug修复和版本维护的难度。

(6)从操作的角度来看,MapReduce在例如Bug修复、性能提升和特性化等并不重要的系统更新时,都会强制进行系统级别的升级。更糟糕的是,MapReduce不考虑用户的喜好,强制让分布式集群中的每一个Client同时更新。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈