mapreduce job提交流程源码级分析(一)(原创)
首先,在自己写的MR程序中通过org.apache.hadoop.mapreduce.Job来创建Job。配置好之后通过waitForCompletion方法来提交Job并打印MR执行过程的log。Hadoop版本是1.0.0。
public boolean waitForCompletion(boolean verbose
) throws IOException, InterruptedException, ClassNotFoundException {
if (state == JobState.DEFINE) {
submit(); //一
}
if (verbose) {
jobClient.monitorAndPrintJob(conf, info); //二
} else {
info.waitForCompletion(); //三
}
return isSuccessful(); //四
}
我们将waitForCompletion分成四步来讲解。
一、在判断状态state可以提交Job后,执行submit()方法。
Submit方法首先是确保当前的Job的状态是处于DEFINE,否则不能提交Job。然后启用新的API,即org.apache.hadoop.mapreduce下的Mapper和Reducer,这一点会在后面的MapTask和ReduceTask中觉得是否使用mapreduce包下的新API或者是mapred包下的旧API,这里默认已经使用新的了。
Connect方法会产生一个JobClient实例,用来和JobTracker通信。
jobClient.submitJobInternal(conf)用来:
1、链接JobTracker获取JobID
2、提交作业jar文件
3、提交分片信息splits
4、提交job.xml配置文件
5、提交Job
上述五步中的2~4可以看做一个过程就是向HDFS上传作业资源。由于比较
麻烦,后续会再讲提交过程。
jobClient.submitJobInternal(conf)会返回一个RunningJob—info,这个info一般是org.apache.hadoop.mapred. NetworkedJob的实例,NetworkedJob实现了RunningJob接口,可以用来跟踪作业的执行进度等一些统计信息。
提交给JobTracker后,就将作业状态调整为RUUNING,表示该作业正在被调度运行。
二、jobClient.monitorAndPrintJob(conf, info)会不断的刷新获取job运行的进度信息,并打印。waitForCompletion方法的boolean参数verbose为true表明要打印运行进度,为false就只是等待job运行结束,不打印运行日志。
三、坐等Job运行完毕,不打印日志。
四、返回作业成功与否
大体的流程比较简单,但是实际的运行过程非常复杂,不知道后面的还能不能写出来(好些东西还不清楚)。。。。代码量比较大。以此做笔记,便于和大伙交流并记忆。
有问题欢迎交流留言哈!
mapreduce job提交流程源码级分析(一)(原创)的更多相关文章
- mapreduce job提交流程源码级分析(三)
mapreduce job提交流程源码级分析(二)(原创)这篇文章说到了jobSubmitClient.submitJob(jobId, submitJobDir.toString(), jobCop ...
- mapreduce job提交流程源码级分析(二)(原创)
上一小节(http://www.cnblogs.com/lxf20061900/p/3643581.html)讲到Job. submit()方法中的: info = jobClient.submitJ ...
- MapReduce之Job提交流程源码和切片源码分析
hadoop2.7.2 MapReduce Job提交源码及切片源码分析 首先从waitForCompletion函数进入 boolean result = job.waitForCompletion ...
- Spark3.0YarnCluster模式任务提交流程源码分析
1.通过spark-submit脚本提交spark程序 在spark-submit脚本里面执行了SparkSubmit类的main方法 2.运行SparkSubmit类的main方法 3.调用doSu ...
- JobTracker启动流程源码级分析
org.apache.hadoop.mapred.JobTracker类是个独立的进程,有自己的main函数.JobTracker是在网络环境中提交及运行MR任务的核心位置. main方法主要代码有两 ...
- TaskTracker启动过程源码级分析
TaskTracker也是作为一个单独的JVM来运行的,其main函数就是TaskTracker的入口函数,当运行start-all.sh时,脚本就是通过SSH运行该函数来启动TaskTracker的 ...
- MapReduce的MapTask任务的运行源码级分析
TaskTracker任务初始化及启动task源码级分析 这篇文章中分析了任务的启动,每个task都会使用一个进程占用一个JVM来执行,org.apache.hadoop.mapred.Child方法 ...
- MapReduce job在JobTracker初始化源码级分析
mapreduce job提交流程源码级分析(三)中已经说明用户最终调用JobTracker.submitJob方法来向JobTracker提交作业.而这个方法的核心提交方法是JobTracker.a ...
- 监听器初始化Job、JobTracker相应TaskTracker心跳、调度器分配task源码级分析
JobTracker和TaskTracker分别启动之后(JobTracker启动流程源码级分析,TaskTracker启动过程源码级分析),taskTracker会通过心跳与JobTracker通信 ...
随机推荐
- <实训|第三天>Linux登录界面的修改以及Richard Stallman、自由软件运动
在写博客之前我想说两点: 承认一个错误,昨天写的实训第二天,我把redhat6.7写成了Linux6.7,感谢热心人士的指出! 昨天写的文章名字太长了,今天改善,内容感觉表述不全,希望各位谅解! 官方 ...
- PHP Yii2.0(一):环境搭建 & 问题集锦
第一节 简单认识版本的异同 (1)版本说明 在安装和使用之前,我们需要知道 PHP Yii 有两个不同的版本(Yii 1.*或者Yii 2.*),这两个版本的目录结构不一样,其具体使用方式差异较大,因 ...
- Swift与Objective-c 混编CocoaPods 引入第三方库遇到的问题 (一)
最近Swift 这么火也想尝试着用一下.考虑到Swift 出来的时间也不长.还有就是就是苹果更新的过于平凡 暂时还是不要将现有项目都用swift开发. 先来看看我遇到的问题: 问题一.
- Android中图片大小和屏幕密度的关系讲解
Android手机适配是非常让人头疼的一件事,尤其是图片,android为了做到是适配提供了很多文件夹来存放不同大小的图片,比如:drawable-ldpi.drawable-mdpi.drawabl ...
- Linux下硬盘安装Windows系统。
注意:本方法安装后会把Linux系统损坏,方法适用于完全不再需要Linux系统. 本方法在ubuntu 14.04,centos 6.5,debian 8测试成功. 安装方法是通过grub2引导Win ...
- 第十四课:js操作节点的插入,复制,移除
节点插入 appendChild方法,insertBefore方法是常用的两个节点插入方法,具体实现,请看js高级程序设计,或者自行百度. 这里提一下面试时经常会问到的问题,插入多个节点时,你是怎么插 ...
- Javascript基础系列之(五)条件语句(比较操作符)
和其他语言一样,JavaScript也有条件语句对流程上进行判断.包括各种操作符合逻辑语句 比较操作符 常用的比较操作符有 等于 == , 不等于!= , 大于 >, 小于 < ...
- 配置mysql5.5主从服务器(转)
教程开始:一.安装MySQL 说明:在两台MySQL服务器192.168.21.169和192.168.21.168上分别进行如下操作,安装MySQL 5.5.22 二.配置MySQL主服务器(19 ...
- gitlab 配置邮箱
摘自:http://www.tuicool.com/articles/ruyERz 这里我用的是263企业邮箱 这里我们用smtp发送邮件,要是系统自带有sendmail,我们就给他卸掉,yum re ...
- [转]Java中的对象和对象引用实例浅析
在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起了解一下对象和对象引用之间的区别 ...