【Debug跟踪Hadoop3.0.0源码】第二节 jobSubmitter(提交器对象)的初始化

【Debug跟踪Hadoop3.0.0源码】第二节 jobSubmitter(提交器对象)的初始化

回顾

上一节中我们对 Configuration和Job对象的初始化过程进行了跟踪,查看了相关初始化的内容,下面进入waitForCompletion(boolean verbose) 方法中继续跟踪,讲述一下Cluster对象的初始化过程。

jobSubmitter(提交器对象)的初始化

进入waitForCompletion(boolean verbose)方法后,根据job对象信息判断作业是否为定义状态,然后调用submit()方法:
在这里插入图片描述
同样进入submit()方法:
在这里插入图片描述
我们看到ensureState(Job.JobState state)方法有一次对job的状态进行了判断,如果我们的job状态不是DEFINE状态,将打印相关的异常提示信息:
在这里插入图片描述
我们的job状态是DEFINE的,因此不会打印异常,接着是下一个方法setUseNewAPI(),通过名称我们知道,这是一个设置新API的方法,跟进去看看:
在这里插入图片描述
第一件事,获取numReduces数目(mapreduce.job.reduces,代表我们启动ReduceTask的数目),默认值是1:
在这里插入图片描述

这里我们获取的是100是因为我的mapred-site.xml里面指定了其数目(mapreduce.job.reduces过大的数字,意味着复杂的shuffle,输出文件增多,这是生产集群上拿下来的默认配置,我没有更改,大家本地测试不要这么搞):
在这里插入图片描述
继续下一句:

this.conf.setBooleanIfUnset("mapred.mapper.new-api", this.conf.get(oldMapperClass) == null);

是将job的mapperAPI 布尔值设为true:
在这里插入图片描述
接着将mapperAPI 设置为新API,reducerAPI设置过程同理(此步骤后,我们的程序使用mapred.mapper.new-api和mapred.reducer.new-api);
下一个方法connect()中,我们将在其中获取一个Cluster对象:
在这里插入图片描述
我们的客户端中就是使用这个Cluster对象里的属性与yarn(ResourceManager)通信,通过查看其设置过程的属性不难发现,Cluster对象初始化了rpc(一种远程调用框架)接口,为通讯做好了准备;
在这里插入图片描述
Cluster对象初始化完了之后,接着获取了一个提交器submitter:
在这里插入图片描述
进入submitter提交器获取方法getJobSubmitter(FileSystem fs, ClientProtocol submitClient)中,我们发现其是通过new的方式new了一个Submitter对象,那么这个submitter对象究竟有什么属性?搞清楚这个问题之前,我们先搞清楚getJobSubmitter(FileSystem fs, ClientProtocol submitClient)方法中的fileSystem 、client属性是怎么获取的,又包含什么意义:
在这里插入图片描述
我们可以看到fileSystem 、client属性均是通过cluster对象获取的,先查看FileSystem 属性的获取过程,进入getFileSystem()方法:
在这里插入图片描述
我们发现,其通过一系列的互相get(xxx)读取了conf里面设定的各种路径参数,然后根据这些参数进行截取赋值(这个跟踪的过程有点绕,我被绕晕了):
在这里插入图片描述
以这些路径信息初始化了fileSystem对象的相关属性(在我现阶段的理解中就是,该过程将配置文件中的配置从字符记录的形式反序列化成fileSystem的相关属性,也就是fileSystem对象的反序列化过程):
在这里插入图片描述
在这里插入图片描述

在getClient()方法中,获取了一个与yarn通信的对象client:
在这里插入图片描述
回到getJobSubmitter(FileSystem fs, ClientProtocol submitClient),submitter对象究竟有什么属性?
在这里插入图片描述
可以看到jobSubmitter是一个初始化submitClient和jtFs属性的对象(有了文件系统相关文件的路径信息和与yarn进行通信的client)。

后记

本节跟踪了从Configuration和Job对象的初始化之后到提交器jobSubmitter对象的初始化的过程,下一步是跟踪提交器jobSubmitter与yarn进行通信的过程。

跳转

【Debug阅读Hadoop3.0.0源码】第一节 Configuration和Job对象的初始化
【Debug跟踪Hadoop3.0.0源码】第二节 jobSubmitter(提交器对象)的初始化

发布了48 篇原创文章 · 获赞 70 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/Jack_Roy/article/details/104398584
今日推荐