MapReduce
1.MapReduce原理
本节将对的MapReduce起源、MapReduce主要功能、MapReduce的处理流程等方面进行分析。(1)MapReduce是hadoop的核心组件之一,hadoop要分布式包括两部分,一是分布式文件系统hdfs,一部是分布式计算框,就是mapreduce,缺一不可,也就是说,可以通过mapreduce很容易在hadoop平台上进行分布式的计算编程。(2)Mapreduce是一种编程模型,是一种编程方法,抽象理论。
2.MapReduce的概述
(1.)MapReduce是一个基于集群的高性能并行计算平台,他允许用市场上普通的商用服务器构成一个包含数十,说白甚至数千个节点的分布式并行计算集群
(2.)MapReduce是一个并行计算与运行软件框架,它提供了一个庞大但设计精良的并行计算软件框架,能自动划分计算数据和计算任务, 在集群节点上自动分配和执行任务,以及收集计算结果,将数据分步存储、数据通信、容错处理等并行计算涉及到很多系统底层的复杂细节交由系统负责处理, 减少了软件开发人员的负担
(3.)是一个并行程序设计模型与方法,用map和reduce两个函数编程实现基本并行计算任务,提供抽象操作和并行编程接口,可以简单方便的完成大规模数据的编程和计算处理
Mapreduce的优缺点
优点
1>Mapreduce易于编程
它可以简单的实现一些接口,就可以完成一个分布式程序,这个程序可以分布到大量的廉价的pc机器上运行。也就是说你写一个分布式程序,跟写一个简单的串行程序是一模一样的。就是因为这个特性使的Mapreduce编程变得非常流行。
2>良好的扩展性
项目当你的计算资源得不到满足的时候,你可以通过简单的通过增加机器来扩展它的计算能力
3>高容错性
Mapreduce的设计初衷就是使程序能够部署在廉价的pc机器上,这就要求它具有很高的容错性。比如一个机器挂了,它可以把上面的计算任务转移到另一个节点上运行,不至于这个任务运行失败,而且这个过程不需要人工参与,而完全是由hadoop内部完成的。
适合PB级以上海量数据的离线处理
缺点
不擅长实时计算
Mapreduce无法做到像Mysql那样做到毫秒或者秒级的返回结果
不擅长流式计算
流式计算的输入数据是动态的,而Mapreduce的输入数据集是静态的,不能流态变化。这是Mapreduce自身的设计特点决定了数据源必须是静态的。
不擅长DAG(有向图)计算
多个应用程序存在依赖关系,后一个应用程序的输入为前一个应用程序的输出,在这种情况下,Mapreduce并不是不能做,而是使用后每个Mapreduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常低下。
MapReduce的集群行为
MapReduce的集群行为包括:
1、任务调度与执行
MapReduce任务由一个JobTracker和多个TaskTracker两类节点控制完成。
2、本地计算
split通常应小于或等于HDFS数据块的大小,从而保证split不会跨越两台计算机存储,便于本地计算。
3、Shuffle过程
将Mapper的输出结果按照key值分成R份(R是设定的Reduce的个数)划分时使用哈希函数,保证某一范围内的key由某个Reduce来处理。
4、合并Mapper输出
在Shuffle之前闲的结果进行合并(Combine过程)即将中间结果相同key值的多组<key,value>对合并成一对。可以减少中间结果数量,从而减少数据传输过程中的网络流量。
5、读取中间结果
Mapper的输出结果被直接写到本地磁盘而非HDFS
6、任务管道
有时R个Reduce会产生R个结果,会将这R个结果作为另一个计算任务的输入开两类节点控制完成
MapReduce的主要功能
(包括以下几个方面)
(1)数据划分和计算任务调度
大数据划分为很多个数据块,每个数据块对应于一个计算任务(Task),并自动 调度计算节点来处理相应的数据块。作业和任务调度功能主要负责分配和调度计算节点(Map节点或Reduce节点),同时负责监控这些节点的执行状态,并 负责Map节点执行的同步控制。
(2)数据/代码互定位
为了减少数据通信,一个基本原则是本地化数据处理,即一个计算节点尽可能处理其本地磁盘上所分布存储的数据,这实现了代码向 数据的迁移;当无法进行这种本地化数据处理时,再寻找其他可用节点并将数据从网络上传送给该节点(数据向代码迁移),但将尽可能从数据所在的本地机架上寻 找可用节点以减少通信延迟。
(3)系统优化
为了减少数据通信开销,中间结果数据进入Reduce节点前会进行一定的合并处理;一个Reduce节点所处理的数据可能会来自多个 Map节点,为了避免Reduce计算阶段发生数据相关性,Map节点输出的中间结果需使用一定的策略进行适当的划分处理,保证相关性数据发送到同一个 Reduce节点;此外,系统还进行一些计算性能优化处理,如对最慢的计算任务采用多备份执行、选最快完成者作为结果。
(4)出错检测和恢复
以低端商用服务器构成的大规模MapReduce计算集群中,节点硬件(主机、磁盘、内存等)出错和软件出错是常态,因此 MapReduce需要能检测并隔离出错节点,并调度分配新的节点接管出错节点的计算任务。同时,系统还将维护数据存储的可靠性,用多备份冗余存储机制提 高数据存储的可靠性,并能及时检测和恢复出错的数据。
MapReduce的编程基础
-
WordCount示例及MapReduce程序框架
-
MapReduce程序执行流程
-
深入学习MapReduce编程
-
参考资料及代码下载