MapReduce 初学总结

MapReduce 原理初学

 
MapReduce 体现一种编程思想,是一种分布式计算模型。Hadoop实现了MapReduce编程模型和计算框架。核心思想:把对大规模的数据集的操作,分发给一个主节点管理下的各分节点共同完成,然后通过整合各分节点的中间结果,得到最终的结果。其核心是要实现map()和reduce()函数,函数的形参是key,value对,map负责把任务分解成多个任务,reduce负责把分解后的多任务处理的结果汇总起来。并行编程中的其他复杂问题,例如分布式存储、工作调度、负载均衡、容错、通信等,均由MapReduce框架处理。
处理流程:
map可并发,reduce也可以并发,但是map和reduce不能并发,必须map执行完,才可以reduce。
 
把数据拆分成<K1,V1>是由框架完成,是一种粗粒度的分解;<K2,V2>是map函数处理的结果;shuffle 有排序、组合、分组的功能,已经由框架完成,但是也可以去覆盖实现,实现自定义;
 
◆执行步骤:
 1. map任务处理
1.1 读取输入文件内容,解析成key、value对。对输入文件的每一行,解析成key、value对。每一个键值对调用一次map函数。
1.2 写自己的逻辑,对输入的key、value处理,转换成新的key、value输出。
1.3 对输出的key、value进行分区。
1.4 对不同分区的数据,按照key进行排序、分组。相同key的value放到一个集合中。
1.5 (可选)分组后的数据进行归约。
2.reduce任务处理
2.1 对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。
2.2 对多个map任务的输出进行合并、排序。写reduce函数自己的逻辑,对输入的key、value处理,转换成新的key、value输出。
2.3 把reduce的输出保存到文件中。
 
namenode 、datanode、secondaryNamenode、jobtracker、tasktracker的关系:
1、namenode和datanode,从存储的角度来考虑;
2、jobtracker和tasktracker从应用的角度的来考虑,jobtracker负责任务的调度,而tasktracker则是负责任务的执行;所以tasktracker是运行在datanode的,而Namenode和jobtracker则不一定在同一个机器上;
 
MapReduce运行机制:

1.执行runjob()方法创建一个JobClient实例;
2.向JobTracker请求一个新的作业Id,检查作业的输出说明,计算作业的输入分片;
3.复制作业资源(Jar文件、配置文件和计算所得分片信息)到以作业ID命名的的目录下的Jobtracker的文件系统下
4.调用Jobtracker的submitjob()方法来通知Jobtracker作业准备执行
5.创建一个表示正在运行作业的对象——封装任务和记录信息,以便跟踪任务的状态和进程
6.获取已经计算好的输入分片信息,为每一个分片创建一个map任务(reduce任务的个数由用户配置),将任务放入任务列表
7.TaskTracker定期发送“心跳”给JobTracker.“心跳”告知JobTracker它是否存活,同时也充当两者之间的消息通道。Jobtracker为tasktracker选择任务之前,必须先选定任务所在的作业。选择map任务时,jobtracker会考虑tasktracker的网络位置,选在一个距离其输入分片最近的tasktracker
8.把作业的JAR 文件等资源复制到TaskTracker所在的文件系统; 然后Tasktracker解压JAR文件到本地目录;第三步,新建一个TaskRunner实例来运行该任务
9.TaskRunner启动一个新的JVM
10.在JVM运行任务
 





posted @ 2016-03-29 17:14  nwpulisz  阅读(981)  评论(0编辑  收藏  举报