Yarn原理加强之---MapReduce程序在Yarn上简易运行流程

1、提交job:
客户端Client提交job到Yarn主节点ResourceManager上,ResourceManager有两个组件:
一个是ApplicationMaster,用于管理所有applicaion,接收所有job;
第二个是Sheduler:用于资源调度,管理集群资源、分配资源。
2、启动NodeManager:
NodeManager启动向,向ResourceManager汇报运算资源情况。
3、分配jobID和工作IDL:
ApplicationManager分配jobID,并分配默认工作ID和临时工作目录(临时工作目录在HDFS上),将信息返回给客户端Clinent。
4、job初始化:
①创建conf对象:
Confuguration conf = new Configuration();
conf.set(“mapreduce.framework.name”,“yarn”);
conf.set(“yarn.resourcemanager.hostname”,“linux01”);
Job job = nob.getInstance(conf,“wordcount”);
job.setJar(“D://wordCount.jar”);
创建工作目录:
/data/work.jobId
②上传jar包:
WordCountMapper.class maptask
WordCountReducer.class reducetask
③初始化配置:
conf.xml;mapred-site.xml;yarn-site.xml…
④确定输入输出路径:
FileInputFormat.setInputPaths(job,new Path(“输入路径”))
FileOutputFormat.setOutputPath(job,new Path(“输出路径”))
5、计算任务切片(Splits[]):
根据输入路径中文件的大小和个数计算任务切片,确定maptask个数。(每个文件至少一个切片)
①遍历文件,获取每个文件大小;
②判断文件大小:如果文件>=1.1*128M,进行逻辑切割一次,依次累加,直到剩余的小于此为止,不再进行切割,获取maptask数量。
③将计算结果获得的数量放入临时的初始化目录中。
6、申请创建容器:
①客户端向ApplicationManager申请默认容器(单核,1.5G),由Scheduler遍历后分配;
②MrApplicationMaster领取自己的任务,创建container容器(单核,2G)。
7、申请容器数量:
maptask:根据container中获取到的切片获取maptask数量;
reducetask:根据job.setNumberReduceTsk()获取rducetask数量。
8、启动程序:
①启动程序之前,临时目录下载工作内容(配置、jar包、切片数量等)到container中;
②container中常见创建MRApplicationMaster对象(此对象实际代表job工作任务)。
9、Schduler分配任务:
由Scheduler分配maptask和reducetask,分配的任务放在任务队列中。
10、从节点领取任务、创建容器:
分配的几个从节点在汇报时,领取属于自己的maptask任务,在本节点上创建属于自己的容器container。
11、运行程序:
MRApplicationMaster发送指令,每个领取到maptask任务的节点运行程序吗,程序在container的YarnChild中运行。
12、汇报任务进度:
从节点的maptask任务进度汇报给MRApplicationMaster,再由MRApplicationMaster向ResourceManager汇报整体任务进度。
如果执行maptask从节点出错,ResourceManager会再次进行任务分配给其他从节点。
13、分配执行ReduceTask任务:
当maptask任务执行完成后(中间结果写入本地磁盘),再由Schduler分配reducetask任务到任务队列,从节点领取属于自己的reducetask任务。具体流程与上述9~12步大致相同,不再赘述。
14、输出结果:
reducetask任务执行完成,将结果写出到HDFS中,
15、资源回收:
①释放map中的YarnChild对象,释放container容器;
②回收reducetask中的YarnChilda对象,释放container容器;
③回收完成后删除临时目录;
④MRApplicationMaster中剔除job任务;
⑤释放MRApplicationMaster对象,释放 初始容器;
⑥程序退出。

你可能感兴趣的:(hadoop,mapreduce,HDFS,hadoop)