【Debug跟踪Hadoop3.0.0源码】第一节 Configuration和Job对象的初始化

【Debug跟踪Hadoop3.0.0源码】第一节 Configuration和Job对象的初始化

前言

不得不说,在此前我对阅读源码这件事是拒绝的,一方面也知道自己非读不可,另一方面是功力不够,所以数次向一些开源框架的源码发起总攻,最终都以失败而告终。
那么这一次,我在已经初步阅读过MapReduce提交Job源码的基础上,根据【大数据入门笔记系列】第五小节SpringBoot集成hadoop开发环境(复杂版的WordCount)做出来的环境,通过Debug的方式来跟一下整个Job提交流程。
这里做一个系列来记录跟踪过程,由于要保证一定的可读性(直接放在一个章节里势必又臭又长,而且不容易展开叙述),我会分阶段采用章节叙述,尽可能详细介绍每一个阶段发生的事情。

Configuration和Job对象的初始化

那么首先,我们将第一个断点打在JobUtils类中的job提交语句(job.waitForCompletion(true))上:
在这里插入图片描述
然后用Debug方式启动项目,使用url:

http://localhost:8080/WordCountController/wordCount?jobName=jack_roy_word_count&inputPath=/0000/00001

向程序发送GET请求,触发任务提交,顺利进入断点:
在这里插入图片描述
断点参数信息:

hdfsPath = "hdfs://172.20.22.11:8020/"
host = "172.20.22.11"
Variables debug info not available
jobName = "jack_roy_word_count"
inputPath = "/0000/00001"
outputPath = "/0000/jack_roy_word_count_2020_02_19_18_31_12"
conf (slot_3) = {Configuration@7073} "Configuration: core-default.xml, core-site.xml, mapred-default.xml, mapred-site.xml, yarn-default.xml, yarn-site.xml, hdfs-default.xml, hdfs-site.xml"
job (slot_4) = {Job@7074} Method threw 'java.lang.IllegalStateException' exception. Cannot evaluate org.apache.hadoop.mapreduce.Job.toString()

其中,hdfsPath 、host 两个静态变量是我们通过application-dev.yml里面指定的参数赋值的(由于hdfsPath 、host是静态变量,只能在内部用set方法将path、和ip的值进行赋予):
在这里插入图片描述
jobName、inputPath是我们通过Url请求指定的参数:
在这里插入图片描述
outputPath是我们根据输入的作业名外加一个系统时间拼接出来的:
在这里插入图片描述
conf和job很明显是两个对象,其中conf对象包含了我们的代码中一些参数指定:
在这里插入图片描述
以及我们从生产集群上拉到本地来的core-site.xml、mapred-site.xml、yarn-site.xml这三个文件包含的一些配置,这是一个conf反序列化的过程:
在这里插入图片描述
通查看job对象的内容:
在这里插入图片描述
我们很容易得知,截止目前断点的job已经包含了一些作业的基本信息,包括作业名、集群相关参数配置、数据输入、输出路径、依赖包所在位置、程序jar包所在本地的位置信息等:
在这里插入图片描述

后记

通过本节跟踪的过程,我们得知,客户端在与yarn(集群模式下)进行通讯之前,会先在本地对Configuration和Job对象进行初始化,然后跳转到waitForCompletion方法内进行后续的动作,下节我们继续跟踪后续的通讯和提交过程。

跳转

【Debug阅读Hadoop源码】第一节 Configuration和Job对象的初始化

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

猜你喜欢

转载自blog.csdn.net/Jack_Roy/article/details/104394633