MapReduce概述
MapReduce
是一个分布式的计算框架(编程模型),最初由由谷歌的工程师开发,基于GFS的分布式计算框架。后来Cutting
根据《Google Mapreduce》,设计了基于HDFS
的Mapreduce
分布式计算框架。
map
和reduce
实现了分而治之
的思想,map
的拆分和封装,reduce
的计算和规约。
MR框架对于程序员的最大意义在于,不需要掌握分布式计算编程,不需要考虑分布式编程里可能存在的种种难题,比如任务调度和分配、文件逻辑切块、位置追溯、工作。这样,程序员能够把大部分精力放在核心业务层面上,大大简化了分布式程序的开发和调试周期。
MapReduce的进程
MapReduce
框架有两个进程,启动成功后会有如下两个:
ResourceManager
:MapReduce
的管理者进程,1.0
时叫JobTrakcer
。它是在namenode
上。NodeManager
:MapReduce
的工作进程,2.0
时叫TaskTracker
,它在datanode
上。我理解的是,map
任务和reduce
任务即属于这个进程层级上的工作内容。
JobTracker / ResourceManager工作职能:
A.知道管理哪些机器,即管理哪些NodeManager
。
B.要有检测机制,能够检测到NodeManager
的状态变换,通过RPC心跳来实现。
C.任务的分配和调度,ResourceManager
能够做到细粒度的任务分配,比如某一个任务需要占用多大内存,需要多少计算资源。
注:ResourceManager是hadoop2.0版本之后引入了yarn,有yarn来管理hadoop之后,jobtracker就被替换成了ResourceManager
TaskTracker / NodeManager工作职能:
能够收到ResourceManager
发过来的任务,并进行任务的处理。这里处理任务指的是Map任务
或Reduce任务
。
MapReduce的两类任务
- MapTask(map任务)
- ReduceTask(reduce任务)
MapReduce任务执行大致步骤
在计算的时候,首先会对数据进行逻辑切片,主要包含了切片的描述信息而并不包含真正的数据,然后再交给mapper
执行。
① Map 任务
Map任务数 = 文件块数,Map
任务用于
读取输入文件内容,对输入文件的每一行,解析成key、value对。每一个键值对调用一次map函数。写自己的逻辑,对输入的key、value处理,转换成新的key、value输出。对输出的key、value进行分区。对相同分区的数据,按照key进行排序(默认按照字典顺序进行排序)、分组。相同key的value放到一个集合中。(可选)分组后的数据进行归约。
② Reduce 任务
对多个map任务的输出,按照不同的分区,通过网络(http协议
)copy到不同的reduce节点。这个过程并不是map将数据发送给reduce,而是reduce主动去获取数据,然后再做处理。
以上仅仅是简单的介绍,下一篇记录在JAVA
代码层次上的map
和reduce
的具体写法。Hadoop学习——MapReduce的组件及简单API