MapReduce总结(二)

11.12
Hadoop Mapreduce是一个并行计算框架……
软件框架、并行处理、可靠且容错、大规模集群、海量数据集

Mapper负责分解,Reducer负责汇总。
形象的解释:
要求数图书馆中所有的书,一个人数1号架,一个人数2号架,即为Map,人越多,数越快。数完统计所有人的数,即Reduce。

MapReduce工作机制:
工作机制(任务的分解(Map)与结果的汇总(Reduce)是其主要思想)。
整个MapReduce运行过程包括四个实体:

客户端:Client,编写mapreduce程序,配置作业,提交作业;

Job Tracker:协调作业的运行;是一个后台服务进程,启动之后,会一直监听并接收来自各个Task Tracker发送的心跳信息,包括资源使用情况和任务运行情况等;只有一个,负责任务信息采集,相当于Master;对应于Namenode;一般情况部署在单独机器上。
1、作业控制:Hadoop中每一个应用程序被表示成一个作业,每个作业被分为多个任务,作业控制模块负责作业的分解和状态的监控。
2、状态监控:Task Tracker状态监控、作业状态监控、任务状态监控;主要是容错和为任务调度提供决策依据。

Task Tracker:处理作业划分后的任务;是Job Tracker和Task之间的桥梁;Task Tracker、Job Tracker、Task之间通过RPC协议进行通信;
1、从Job Tracker接收并执行各种命令:运行任务、提交任务、杀死任务等;
2、将本地节点上各个任务的状态通过心跳周期性汇报给Job Tracker,节点健康情况、资源使用情况、任务执行进度、任务运行状态等;(map task我做完了,啥时候让reduce task来拉数据啊)
3、运行在多个节点上的服务;主动和Job Tracker通信,接收作业,并负责执行每一个任务;
4、需要运行在HDFS的Datanode上。

HDFS:在其他实体之间共享作业文件;保存作业数据、配置信息等,同时保存最后的运行结果;
Namenode:管理文件目录结构,管理datanode,接收请求;
Datanode:存储数据
block:读写数据的基本单位,默认64MB
secondary namenode:帮助Namenode合并编辑日志,减少启动时间,设置检查点来帮助Namenode更好工作,不是Namenode备份。

机制:
1/在客户端启动一个作业;
2/向Job Tracker请求一个唯一的Job ID;
3/将运行作业所需要的资源复制到HDFS上,包括MapReduce程序打包的jar文件、配置文件和客户端计算所得的输入划分信息;这些文件都存放在Job Tracker专门为作业创建的文件夹中,文件夹名字为该作业的Job ID;
4/Job Tracker接收到作业后,将其放在一个作业队列里,等待作业调度器对其进行调度,当作业调度器根据自己的调度算法(FIFO等)调度到该作业时,会根据输入划分信息(Split)为每个划分创建一个map任务,并将map任务分配给Task Tracker执行。(map不是随便分配给Task Tracker,而是数据本地化:将map任务分配给含有map需要处理的数据块的Task Tracker上,同时将jar包复制到其上运行,叫做“运算移动,数据不移动”。然后分配reduce任务时不考虑数据本地化:)

map、reduce、shuffle:
在这里插入图片描述
一共分五步,input,split,map,shuffle,reduce。
input:数据存储;
split:在workcount里面是根据空格切割句子;map task只读split,split基本上和hdfs的基本存储块block同样大小,一个split对应一个map;
map:在wordcount里面就是把他们分开计数;
shuffle:洗牌。即将map产生的数据通过分区、排序等过程分配给不同的reduce任务;
reduce:汇总。

Map端:
在这里插入图片描述
1、input:数据来源于HDFS的block,MapReduce概念中,map task只读取Split(分片);
split是map task只读单位,存储的是分片长度和记录数据的位置数组;
Running map task:编写好的map函数;
2、partition:分割map每个节点的结果,按照key分别映射给不同的reduce,可自定义;
partition的作用就是把错综复杂的数据归类;
Memory Buffer:环形缓冲区;map task输出结果首先会进入一个缓冲区,大小为100MB,当map task内容太大内存会撑爆,所以存在一个守护进程,当缓冲区达到上限的80%的时候,启动一个spill进程(溢写:把内存中的map task写入磁盘);
3、溢写进程是单独的,不会影响map task输出;当溢写启动后,要对80MB空间的内容的key做排序,排序是默认行为;同时如果客户端设置过Combiner,那么Combiner这时候会将相同的key/value对的value相加,减少溢写入磁盘的数据大小(可以将Combiner认为是reduce);Combiner的输出是MapReduce的输入,Combiner会优化MapReduce的中间结果,但是得分情况使用,Combiner使用后不能影响最终的reduce结果。
4、merge:合并;每次溢写会生成一个溢写文件在磁盘上,多次溢写则会有多个文件;但当map task真正完成的时候,内存缓冲区的数据也会全部溢写到磁盘中形成一个溢写文件;因为最终的文件只有一个,所以需要将这些溢写文件合并起来。

#map端所有工作结束,最终生成一个文件存放在Task Tracker能拿到的本地目录内,每个reduce task不断通过RPC从Job Tracker获取map task信息,看它是否完成,如果得知完成,那么Shuffle后半段过程开始启动。

Reduce端:
在这里插入图片描述
1、Copy过程:Reduce进程启动一些数据copy线程,通过HTTP方式请求map task所在的Task Tracker获取map task输出文件;Reduce会收到不同map任务传来的数据,并且每个map传来的数据都是有序的。那些map输出的文件归Task Tracker管理在本地磁盘中。
因为map任务一直和其Task Tracker保持联系,而Task Tracker又一直和Job Tracker保持心跳;所以Job Tracker中保存了整个集群的宏观信息;Reduce只需向Job Tracker获取对应的map输出位置就能获得数据。
2、Merge:这里如map端的merge动作,只是数据来源于不同map端;
3、Reduce输入文件:不断merge后,最终生成一个最终文件;文件可能存在内存或者磁盘;让Reduce输入文件定,整个Shuffle才最终结束。
4、reduce阶段:和map函数一样,编写;结果最终存储在hdfs上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值