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.任务管道