您的位置:首页 > 其它

MapReduce作业提交源码分析第一讲【小二讲堂】

2019-04-14 20:26 281 查看
版权声明:本文为博主原创文章,转载请注明出处!!!小二学堂:https://blog.csdn.net/Mirror_w https://blog.csdn.net/Mirror_w/article/details/89301229

本片博文主要讲述MapReduce作业提交源码的分析流程,流程图都是小二手把手操作出来的,建议新手看之前连接hadoop 2.x基本架构和hdfs架构原理解析。
进入小二课堂进行全面学习:小二课堂请点击进入
或者直接进入hdfs底层原理解析及架构分析:https://blog.csdn.net/Mirror_w/article/details/89288212
或者了解hadoop 2.x hadoop3.x运行原理:https://blog.csdn.net/Mirror_w/article/details/89300798

1.客户端调用waitforcompletion()方法


进入到job.class类
2,waitforcompletion内部进行调用两个方法,submit和monitorandprintjob(),如下图所示,第一的是用于提交作业的方法,第二个方法是用于客户端打印作业执行清空的方法 。

3 .setUserNewAPI()提交最新的API用于作业流程的执行。
connect()连接服务端
getJobSubmitter()通过参数获取submitter作业提交者。
submitter.submitJobInternal()通过客户端提交的job作业和集群对象进行提交作业

进入JobSubmitter.class类
4.
checkSpecs(job)检查作业的输出路径是否设置

获取数据切片,调用了方法writeSplits()
5.进入writeSplits()方法里
对API进行判断是旧的api还是新的,,当然是新的了

6.进入writeNewSplit方法

首先通过配置文件的信息获取输入格式化类的对象,这个输入格式化类的对象,如果在配置文件中设置了,则是用户设置的格式化类的对象,没有设置则是默认的TextInputFormat类的对象。输入格式化类的JobContextImpl这个类来进行返回的。

7.进入获取切片的方法getSplits(
进入FIleInputFormat类 --getSplits()方法
a.minsize参数

首先获取minsize参数:

如果用户设置了则是用户设置的数,没有设置则是1,此时没有设置则返回1,即minsize=1;
b.maxsize参数

如果split_maxsize这个参数没有设置则返回Long的最大值,这里没有设置则返回对应的long最大值
c.分析下面方法


liststatus(job)方法通过该job路径返回路径下的所有文件信息。
blklocations=getBlocklocations();获取对应文件的位置信息。
getFileSystem()获取文件系统
blocksize=文件大小。
获取切片大小的方法:
splitSize=computeSplitSize(blockSize,minSize,maxSize);
进入方法内:


通过数学方法计算返回切片的值:返回blocksize,block块的大小(默认128M)
c.1继续分析

获取block块的索引blkindex=getBlockIndex(block块的位置索引,文件长度-文件长度(第一次))初始索引为0
开始为0,第一次:bytesRemaning=开始总的数据块大小-第一次切片的大小,第二次的索引位置则是128,有上面代码可知,获取到的索引就是:0、128、256(128+128)+384(256+128)…直至数据完毕。也就是偏移量吧。
c.2getBlockIndex方法

进行判断,上面方法是判断后去的offset偏移量是在那个block块上,是否在block块的范围之内。
c.3 splits切片数组信息

在splist封装了文件的信息,如斜土例子
文件 offset偏移量 数组存储的位置信息
类似:test.txt 1048576 node01
test.txt 1048576 node02 node04
将切片的数量进行分装。这里意味着数据已经封装好了。

数据切片获取到之后,在jobSubmitter.class类中


在这里完成了maps的数据切片的封装。
7.数据封装完毕,开始提交作业。


jps 在作业提交中的主要进程有:

YarnChild也就是运行作业的容器(Container)。
MRAppMaster:作业执行者和作业调度者

Runjar:客户端进程,这里可以理解为就是客户端

以上博文若有不解之处,请下方评论席回复,小二速回!!!

小二讲堂:https://blog.csdn.net/Mirror_w
IT时讯:全球首家大数据交易所“涅槃重生”

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: