1、Job提交
编写MapReduce代码最后会调用"Job.waitForCompletion(true);",将作业提交到集群中,并等待完成。
1.1、waitForCompletion
verbose参数用来决定是否将运行进度等信息输出给用户。
JobState中Job的状态:定义好等待运行的和正在运行中的两种Job状态。
准备好未执行的Job会调用submit();方法进行执行。
1.2、submit
submit()首先会检查是否正确使用了new API,这通过setUseNewAPI()检查旧版本的属性是否被设置来实现的。
对象刚创建的时候是DEFINE状态,在这个状态下可以设置作业的一些调度前的配置,比如Mapper类、Reducer类、Reduce task数量、分区类、输入输出格式化类等。当作业被submit();集群上之后就变成RUNNING状态,此时不能再设置上面的信息,这时作业处于调度运行阶段。
构造提交器:
1.3、submitJobInternal
在内部调用submitJobInternal()方法提交到文件系统执行。
检查输出目录正确性:
获取作业提交到集群的路径:
获取JobID:
会调用submitJob方法:
1.4、submitJob
准备工作全部完成之后,开始真正执行提交执行: