MapReduce的那些事

1.mapreduce简介

MapReduce的那些事_第1张图片

2.MapReduce的工作原理

2.1 wordcount测试

在执行wordcount时,首先将文件上传到hdfs上,运行jar开启Runjar进程,然后开启MRAppMaster进程,此进程管理任务,充当老大。然后再计算时由YarnChild进程计算,执行完则向MRAppMaster汇报,其中RunJar代表客户端进程,ResourceManager代表服务端进程,而ResourceManage负责将任务分给下属NodeManager,NodeManager领导任务会开启一个进程执行任务,此进程为YarnChild
2.2工作机制
首先客户端与服务端在通信的时候,服务端会返回给客户端一个路径,然后客户端根据这个路径将文件上传到hdfs上,客户端领到任务,然后客户端将任务描述发给服务端(jar包存放在那里,任务的ID是什么等信息),ResourceManager将任务初始化,然后NodeManager会主动去领任务,会将机器的cpu 内存等信息发送给ResourceManager,如果这些信息被ResourceManager认为这台机器很忙了,则这个任务不派送,分给其他的空闲机器,这里面有一种“心跳机制”,相当于隔多长时间跳一次,多长时间去领次任务,NodeManager去hdfs下载class文件,这时候yarnchild会切分任务,map负责切分与执行任务,而reduce负责写回任务
ResourceManager不会主动分配任务,NodeManager领取任务可以提高工作效率,如果每次都是老大分配任务,小弟干完了活没事干 ,整个项目效率低下
MapReduce的那些事_第2张图片

3.任务处理

3.1map
MapReduce的那些事_第3张图片
3.2reduce
MapReduce的那些事_第4张图片

4.MR流程

4.1.代码编写
4.2.作业配置
可配置全局的作业(mared-site.xml),或者针对个别的设置,如reduce可设置多个任务
4.3.提交作业
提交jar包的描述信息到resourcemanager(RPC机制)
4.4.初始化作业
客户端构建一个对象(服务端代理对象),可以RPC通信,将jar包写入到hdfs,将jar包描述信息提交给resourcemanager,然后进行初始化,任务放入到调度器,nodemanager到resourcemanager领取任务
4.5.分配任务
心跳机制:nodemanager每隔一段时间询问,resourcemanager进行任务分配
4.6.执行任务
nodemanager下载hdfs的jar包,然后启动yarnChild进程,
4.7. 更新任务的状态
4.8.回写信息

5.作业提交的源码分析

submit()->connect():客户端跟服务端进行连接,cluster(集群)作为Job的成员变量
5.1构建cluster
clientProtocol client;
client作为cluster的成员变量,clientProtocol作为一个接口代理类,拥有 必须的versionID字段,将代理对象赋给client,cluster拥有服务端代理对象,Job又持有cluster的引用
5.2返回作业路径
是通过mr的一些常量拼接的,一些jar包会放入到这个路径中,会隔一段时间清理jar包
,然后创建作业存放路径,使用服务端代理对象获得的jobid与上面获得的路径(前缀)拼接,形成一个作业对应唯一的一个路径
配置job可设置副本,默认为10,在mared-site.xml中,在mr的core包下,可直接用configration设置setInt();将jar包写入到hdfs上
5.3作业提交到resourcemanager
将jobid和提交的路径,并进行resourcemanager的初始化

你可能感兴趣的:(MapReduce的那些事)