MapReduce概念详解

来源:互联网 发布:新仙泥红枣桂圆 淘宝 编辑:程序博客网 时间:2024/06/05 20:38

最近抽时间也赶时髦学学Hadoop,这是谷歌上找的资料加以自己整理的关于MapReduce的概念入门,相信看了应该也明白了,欢迎大家交流学习。有不明白的微博私信我:@leilei

MapReudce概念:相信大家学习Hadoop的第一天就看到这个概念了吧。

     MapReduceGoogle提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算

先来看看概念:“Map(映射)”和“Reduce(化简)”,他们都是从函数式编程语言借来的概念,还有从矢量编程语言借来的特性。

 

什么是Map(映射):

简单来说,一个映射函数就是对一些独立元素组成的概念上的列表的每一个元素进行指定的操作

例如,一个测试成绩的列表,有人发现所有学生的成绩都被高估了一分,他可以定义一个“减一”的映射函数,用来修正这个错误。

事实上,每个元素都是被独立操作的,而原始列表没有被更改,因为这里创建了一个新的列表来保存新的答案。(这里是不是有点像数据库里的视图(view)的原理。

因为每个元素都是被独立操作的,这就是说,Map操作是可以高度并行的,这对高性能要求的应用以及并行计算领域的需求非常有用

什么是Reduce(化简)

     化简操作指的是对一个列表的元素进行适当的合并继续看前面的例子,如果有人想知道班级的平均分该怎么做?他可以定义一个化简函数,通过让列表中的奇数(odd)或偶数(even)元素跟自己的相邻的元素相加的方式把列表减半,如此递归运算直到列表只剩下一个元素,然后用这个元素除以人数,就得到了平均分)。虽然他不如映射函数那么并行,但是因为化简总是有一个简单的答案,大规模的运算相对独立,所以化简函数在高度并行环境下也很有用。

分布和可靠性

     MapReduce通过把对数据集的大规模操作分发给网络上的每个节点实现可靠性;每个节点会周期性的把完成的工作和状态的更新报告回来。如果一个节点保持沉默超过一个预设的时间间隔,主节点记录下这个节点状态为死亡,并把分配给这个节点的数据发到别的节点。每个操作使用命名文件的不可分割操作以确保不会发生并行线程间的冲突;当文件被改名的时候,系统可能会把他们复制到任务名以外的另一个名字上去

     化简操作工作方式很类似,但是由于化简操作在并行能力较差,主节点会尽量把化简操作调度在一个节点上,或者离需要操作的数据尽可能近的节点上了;这个特性可以满足Google的需求,因为他们有足够的带宽,他们的内部网络没有那么多的机器。

MapReduce原理


MapReduce是大规模数据(TB 级)计算的利器,Map  Reduce 是它的主要思想,来源于函数式编程语言,它的原理如下图所示:

Map 负责将数据打散,Reduce负责对数据进行聚集,用户只需要实现 map  reduce 个接口,即可完成
另外,还可用于科学数据计算,如圆周率 PI 的计算等。Hadoop MapReduce 的实现也采用 Master/Slave 结构。Master 叫做JobTracker,而 Slave 叫做 TaskTracker。用户提交的算叫做 Job,每一个Job 会被划分成若干个 TasksJobTracker负责 Job  Tasks 的调度,而 TaskTracker负责执行 Tasks

 

0 0
原创粉丝点击