Mapreduce 处理的数据必须具备的特点:

--待处理的数据可以分解成许多小的数据集,而且每个数据集都可以完全并行的处理

计算模型的核心部分是map和Reduce函数:

--这两个函数的功能由用户根据需要自己实现,只要能够按照用户自定义的规则,

将输入的键值对转换成另一批键值对输出即可

在map阶段,MapReduce框架将任务的输入数据分割成固定大小的片段,每个片段进一步分解成一批的键值对

Hadoop会为每个片段分map任务,把键值对作为输入,得到计算的中间结果<key,value>,然后再根据key进行

排序,将key值相同的value放到形成的一个列表中,组成一个元组<key,list(v2)>,最后再根据key值得规范,

将这些元组进行分组,对应不同的Reduce任务

在Reduce阶段,reduce把从不同Mapper接受来的数据进行整合排序,然后调用用户自定义的reduce函数对输入

的<key,list(v2)>进行计算,得到<key,value>输出到Hdfs上

1.任务的调度与执行

--MapReduce任务由JobTracker和TaskTracker两个节点控制完成,jobTracker主要是调度和管理Tasktarcker

,Map和Reduce任务是由JobTracker分配给空闲的TaskTracker,由TaskTracker复制这些任务的并行执行。TaskTracker

必须运行在DataNode上,所有DataNode是数据的存储节点也是数据的计算节点,JobTracker负责监控TaskTracker的任务

的运行情况,如果TaskTracker任务失败,Job会将任务重新分配给别的空闲的TaskTracker,如果JobTracker失败任务将

直接失败

2.本地计算

MapReduce框架尽最大努力保证在存储节点上执行计算任务,减少数据在网络中的传输

3.Shuffle过程

MapReduce会将Mapper的输出结果按照key值分成R份(R是预先定义的Reduce个数),划分时常使用hash函数例如,

Hash(key) mod R,这样可以保证某一个范围内的key一定由某个Reduce来处理,从而简化Redcue过程

4.合并Mapper的输出

5.读取中间结果

在完成Combine和Shuffle后,Mapper的输出结果将直接被写到本地磁盘,然后会告诉JobTracker中间结果的文件

位置,再有JobTracker告诉Reduce到哪个DataNode去读取中间结果

6.任务管道