首先,在自己写的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提交流程源码级分析(一)(原创)的更多相关文章

  1. mapreduce job提交流程源码级分析(三)

    mapreduce job提交流程源码级分析(二)(原创)这篇文章说到了jobSubmitClient.submitJob(jobId, submitJobDir.toString(), jobCop ...

  2. mapreduce job提交流程源码级分析(二)(原创)

    上一小节(http://www.cnblogs.com/lxf20061900/p/3643581.html)讲到Job. submit()方法中的: info = jobClient.submitJ ...

  3. MapReduce之Job提交流程源码和切片源码分析

    hadoop2.7.2 MapReduce Job提交源码及切片源码分析 首先从waitForCompletion函数进入 boolean result = job.waitForCompletion ...

  4. Spark3.0YarnCluster模式任务提交流程源码分析

    1.通过spark-submit脚本提交spark程序 在spark-submit脚本里面执行了SparkSubmit类的main方法 2.运行SparkSubmit类的main方法 3.调用doSu ...

  5. JobTracker启动流程源码级分析

    org.apache.hadoop.mapred.JobTracker类是个独立的进程,有自己的main函数.JobTracker是在网络环境中提交及运行MR任务的核心位置. main方法主要代码有两 ...

  6. TaskTracker启动过程源码级分析

    TaskTracker也是作为一个单独的JVM来运行的,其main函数就是TaskTracker的入口函数,当运行start-all.sh时,脚本就是通过SSH运行该函数来启动TaskTracker的 ...

  7. MapReduce的MapTask任务的运行源码级分析

    TaskTracker任务初始化及启动task源码级分析 这篇文章中分析了任务的启动,每个task都会使用一个进程占用一个JVM来执行,org.apache.hadoop.mapred.Child方法 ...

  8. MapReduce job在JobTracker初始化源码级分析

    mapreduce job提交流程源码级分析(三)中已经说明用户最终调用JobTracker.submitJob方法来向JobTracker提交作业.而这个方法的核心提交方法是JobTracker.a ...

  9. 监听器初始化Job、JobTracker相应TaskTracker心跳、调度器分配task源码级分析

    JobTracker和TaskTracker分别启动之后(JobTracker启动流程源码级分析,TaskTracker启动过程源码级分析),taskTracker会通过心跳与JobTracker通信 ...

随机推荐

  1. wifi使用的一些误区

    下面是使用过程中的一些常用的误区: 家里买了三个路由器,信道都设置成同一个,这样会比较好. 买多个路由器的时候,一个人用的时候还好,多个人用的时候就会出问题. 多个设备在同样信道的时候会产生干扰.建议 ...

  2. OpenStack Newton:集虚拟化,裸金属和容器部署的统一云平台(转载)

    2016-10-08木屐大数据在线 国庆长假第六天,OpenStack第十四版本Newton(牛顿?)发布,官方介绍中强调这是一个集虚拟化.裸金属和容器技术的一体化平台,可通过一套API来管理裸金属. ...

  3. js的各种继承

    请先看这个链接:https://segmentfault.com/a/1190000002440502 还有一个里边有js的采用临时方法的继承 http://javapolo.iteye.com/bl ...

  4. web前端开发教程系列-1 - 前端开发编辑器介绍

    目录: 前言 一. Webstorm 1. 优点 2. 缺点 3. 教程 4. 插件 5. 技巧 二. SublimeText 1. 优点 2. 缺点 3. 教程 4. 插件 5. 技巧 前言 由于很 ...

  5. Go语言开发环境搭建

    1.Go的安装 (1)下载go安装程序 下载地址:https://golang.org/dl/ (墙内下载地址http://www.golangtc.com/download),如果是您的系统是win ...

  6. 每天一个linux命令(28):diff 命令

    diff 命 令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版 本的diff还支持二进制文件.diff程 ...

  7. Node on Mac 初步

    安装node之前 1.之前在windows平台上安装node,直接下载一个安装文件得了.但是mac osx是基于unix架构的嘛,跟linux很像啊. 在linux上安装我们多习惯用命令行工具安装啊, ...

  8. Shell good example

    (1) Source code #! /bin/bash reference ()     {     pa=\$"$1"     echo $pa     x=`eval &qu ...

  9. 常用sql,在做项目时用mysqlWorkBeach里面自动生成的

    -- 修改表中的字段的长度ALTER TABLE `sfkbbs`.`sfk_father_module` CHANGE ) NULL DEFAULT NULL COMMENT '父板块名字' ; 在 ...

  10. BZOJ1113 海报PLA

    好像是很古老的题?现在BZOJ上找不到该题,所以没有提交. 1113: [Poi2008]海报PLA Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 8 ...