Hadoop---MR的Job提交源码---(源码篇一)

MR的Job提交源码

刨析一遍切片原理
以源码角度,来深刻理解MR工作原理。
MR源码分析:(wordCount案例)–入口类

问题:
MR中的Job,是如何提交的
首先:
DeBug流程走一波。
在这里插入图片描述
进入提交作业方法:
在这里插入图片描述
在这里插入图片描述
它这里做了一件事,获取了配置信息,思考题:什么配置信息?不会可以留言
在这里插入图片描述
通过YarnClientProtocolProvider | LocalClientProtocolProvider 根据配置文件的参数信息
获取当前job需要执行到本地还是Yarn
最终:LocalClientProtocolProvider ==> LocalJobRunner
在这里插入图片描述
然后我们出来,再看一下下图这个方法。
之前我们设定参数为True,这里用Verbose这个来接收,传True代表将参数进行打印,重点是submit,进入submit,走一遍提交流程。
在这里插入图片描述
这个方法内部又返回了一个方法:submitJobInternal(),我们继续深入。打开submitJobInternal(),方法如下:
在这里插入图片描述
<1> . checkSpecs(job); 检查job的输出路径。
<2> . Path jobStagingArea = JobSubmissionFiles.getStagingDir(cluster, conf);
生成Job提交的临时目录
D:\tmp\hadoop\mapred\staging\Administrator1777320722.staging
<3> . JobID jobId = submitClient.getNewJobID(); 为当前Job生成Id
<4> . Path submitJobDir = new Path(jobStagingArea, jobId.toString()); Job的提交路径
d:/tmp/hadoop/mapred/staging/Administrator1777320722/.staging/job_local1777320722_0001
<5> . 下面有个:copyAndConfigureFiles(job, submitJobDir);我们点进去
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
DeBug到这里,才是创建Job的提交路径
我们再返回去
在这里插入图片描述
<6> . int maps = writeSplits(job, submitJobDir); //生成切片信息 ,并返回切片的个数
在这里插入图片描述
<7> . conf.setInt(MRJobConfig.NUM_MAPS, maps); //通过切片的个数设置MapTask的个数
在这里插入图片描述
<8> . writeConf(conf, submitJobFile); //将当前Job相关的配置信息写到job提交路径下
路径下: job.split job.splitmetainfo job.xml xxx.jar
在这里插入图片描述
<9> .status = submitClient.submitJob(jobId,submitJobDir.toString(),job.getCredentials()); //到了这里,才是真正提交Job

在这里插入图片描述
<10> . jtFs.delete(submitJobDir, true); //等job执行完成后,删除Job的临时工作目录的内容
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45284133/article/details/105610132
今日推荐