Hadoop源码分析28 JobTracker 处理JobClient请求
提交命令行:hadoop jar/opt/hadoop-1.0.0/hadoop-examples-1.0.0.jar wordcount/user/admin/in/yellow.txt /user/admin/out/3
RPC请求:getProtocolVersion(org.apache.hadoop.mapred.JobSubmissionProtocol,28) from 10.1.1.101:37721
处理:返回JobSubmitProtocol的Version
返回:28
RPC请求:getStagingAreaDir()from 10.1.1.101:37722
处理:查看conf.get("mapreduce.jobtracker.staging.root.dir")
返回:hdfs://server1:9000/tmp/hadoop-admin/mapred/staging/admin/.staging
RPC请求:getNewJobId()from 10.1.1.101:37725
处理:new JobID(getTrackerIdentifier(),nextJobId++)
返回:job_201404152128_0001
RPC请求:getQueueAdmins(default)from 10.1.1.101:37730
处理:aclsEnabled=false, 故allAllowed=true
返回:All usersare allowed
RPC请求:submitJob(job_201404152128_0001,hdfs://server1:9000/tmp/hadoop-admin/mapred/staging/admin/.staging/job_201404152128_0001,org.apache.hadoop.security.Credentials@6e28575) from10.1.1.101:37734
处理:
生成JobInfo对象:{id=job_201404152128_0001,jobSubmitDir=hdfs://server1:9000/tmp/hadoop-admin/mapred/staging/admin/.staging/job_201404152128_0001,user=admin}
生成JobInProgress对象:其中包括一个JobStatus对象{jobid=job_201404152128_0001;mapProgress=0; reduceProgress=0; cleanupProgress=0; setupProgress=0; runState=4; startTime=1397612941994; user=admin; priority=NOMAL; schedulingInfo="NA"; failureInfo = "NA"; }
将文件job.xml从HDFS复制到本地:fs.copyToLocalFile(jobFilePath,localJobFile);
(jobFilePath=hdfs://server1:9000/tmp/hadoop-admin/mapred/staging/admin/.staging/job_201404152128_0001/job.xml,/tmp/hadoop-admin/mapred/local/jobTracker/job_201404152128_0001.xml)
将该文件加载到配置:conf=newJobConf(localJobFile);
然后读取job.xml中的配置
生成JobProfile对象:{jobFile="hdfs://server1:9000/tmp/hadoop-admin/mapred/staging/admin/.staging/job_201404152128_0001/job.xml",
jobid=job_201404152128_0001,name="wordcount",queueName="default",url="http://server1:50030/jobdetails.jsp?jobid=job_201404152128_0001"(id=720)
user="admin"}
totalSubmissions++,
将JobInProgress添加到jobs,其内容为
{job_201404152128_0001=org.apache.hadoop.mapred.JobInProgress@7e9b4b1f}
将JobInProgress添加到JobQueueJobInProgressListener、EagerTaskInitializationListener
EagerTaskInitializationListener线程从jobInitQueue取出JobInProgress,初始化JobInProgress:
threadPool.execute(new InitJob(job));
实际调用JobTracker.initJob(JobInProgressjob)
从hdfs://server1:9000/tmp/hadoop-admin/mapred/staging/admin/.staging/job_201404152128_0001/job.splitmetainfo读取TaskSplitMetaInfo,生成相应的TaskInProgress(maps、reduces、cleanup、setup)
返回:JobInProgress的成员JobStatus
RPC请求:getJobProfile(job_201404152128_0001)from 10.1.1.101:37744
处理:
返回:JobInProgress的成员JobProfile
RPC请求:getJobStatus(job_201404152128_0001)from 10.1.1.101:37744
处理:
返回:JobInProgress的成员JobStatus
RPC请求:getTaskCompletionEvents(job_201404152128_0001,0, 10) from 10.1.1.101:37744
处理:
返回:JobInProgress的成员taskCompletionEvents
..................
此后JobClient会不断请求getJobStatus、getTaskCompletionEvents
转载于:https://www.cnblogs.com/leeeee/p/7276491.html
Hadoop源码分析28 JobTracker 处理JobClient请求相关推荐
- Hadoop源码分析(12)
Hadoop源码分析(12) 1. journalnode客户端 在文档(11)中分析了初始化editlog的方法.在初始化之前其会根据集 群的配置状态选择不同的方式来进行初始化.在HA状态下,其 ...
- Hadoop源码分析(25)
Hadoop源码分析(25) ZKFC源码分析 从文档(4)到文档(24),详细分析了namenode的启动流程.最后namenode会以standby模式启动.但在standby模式下的name ...
- Hadoop源码分析(四)
2021SC@SDUSC 研究内容简略介绍 上周我们分析了org.apache.hadoop.mapreduce.Cluster中的的核心代码,本周将继续对mapreduce部分进行分析.在对Clus ...
- Hadoop源码分析-Context
学编程第一个肯定是hello world,Hadoop也不例外,它的hello world就是Wordcount,单词统计例子 1 package org.apache.hadoop.examples ...
- Hadoop源码分析-Text
Text是Hadoop中的一个Writable类,定义了Hadoop中的其中的数据类型以及操作. This class stores text using standard UTF8 encoding ...
- hadoop源码分析_Spark2.x精通:Job触发流程源码深度剖析(一)
, 一.概述 之前几篇文章对Spark集群的Master.Worker启动流程进行了源码剖析,后面直接从客户端角度出发,讲解了spark-submit任务提交过程及driver的启动:集群启动.任务 ...
- Hadoop 源码分析(二四)FSNamesystem
以下轮到FSNamesystem 出场了. FSNamesystem.java 一共同拥有4573 行.而整个namenode 文件夹下全部的Java 程序总共也仅仅有16876 行,把FSNames ...
- Hadoop源码分析笔记(十一):数据节点--数据节点整体运行
数据节点整体运行 数据节点通过数据节点存储和文件系统数据集,管理着保存在Linux文件系统上的数据块,通过流式接口提供数据块的读.写.替换.复制和校验信息等功能.建立在上述基础上的数据节点,还需要维护 ...
- Hadoop源码分析HDFS ClientProtocol——getBlockLocations
2019独角兽企业重金招聘Python工程师标准>>> Class ClientProtocol是HDFS客户端与NameNode之间的接口.Client通过调用ClientProt ...
- Hadoop源码分析16: IPC流程(11) 整体流程
1.发送请求:query.getCPUStatus("Intel"); 2.传送到:RPCInvoker.invoke(Object proxy, Method method, O ...
最新文章
- UTF-8 CPP的使用
- [HNOI2008 GT考试]
- Vue+flask前后端开发
- 论文浅尝 | 基于知识库的神经网络问题生成方法
- jQueryEasyUI Messager基本使用
- 基于JAVA+SpringMVC+MYSQL的大学毕业生就业信息管理系统
- 实时搜索专家Krzana正式进军金融大数据市场
- 用友通总账问题维护精粹
- c语言 zipf分布,Zipf分布:如何测量Zipf分布
- 基于JavaWeb的小说阅读网站设计与实现 毕业论文+答辩PPT+项目源码及数据库文件
- ACCESS 中屏蔽shift键
- Linux安装rsync命令失败,rsync 常见错误与解决方法整理
- JSD-2204-JavaScript-Vue-Day05
- 使用Java实现MP3音乐播放
- CTF-综合测试(高难度)【超详细】
- oracle安装配置
- C语言实现汉字的输出以及字库的应用
- 绝地求生游戏怎么转到计算机上玩,绝地求生大逃杀吃鸡游戏提示tslgame.exe 应用程序错误解决方法...
- JS基础学习(十):字符串的大小写转换、trim()方法、JS字符串截取和模版字符串
- Linux内存池技术
热门文章
- [转]网络性能评估工具Iperf详解(可测丢包率)
- 深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
- likely,unlikely宏与GCC内建函数__builtin_expect()
- Scanner初学需要注意的几个问题
- java连接mysql-8.0.11且成功读写
- cfda计算机管理化系统,计算机化系统清单
- 广东财经大学计算机专业学费,广东财经大学各专业一年至少需要交的学费
- mybatis如何处理参数
- Nginx源码分析 - 基础数据结构篇 - 字符串结构 ngx_string.c(08)
- 能做多大的单片机项目程序开发,就代表了你的敲代码的水平