- 流程图
- 函数调用关系图
- JobConf
JobConf 类继承 org.apache.hadoop.conf.Configuration 类,所有客户端程序中配置的信息和其他运行信息,都会保存在这个类里。
- JobClient
JobClient.runJob(job) 静态方法会实例化一个 JobClient 实例 , 然后用此实例的 submitJob(conf) 方法向 master 提交作业。此方法会返回一个 RunningJob 对象,它用来跟踪作业的状态。作业提交完毕后, JobClient 会根据此对象开始轮询作业的进度,直到作业完成。
submitJob(conf) 内部是通过 submitJobInternal(job) 方法完成实质性的作业提交。 submitJobInternal(job) 方法首先会向 hadoop 分布系统文件系统 hdfs 依次上传三个文件 : job.jar, job.split 和 job.xml 。
job.xml: 作业配置,例如 Mapper, Combiner, Reducer 的类型,输入输出格式的类型等。
job.jar: jar 包 , 里面包含了执行此任务需要的各种类,比如 Mapper,Reducer 等实现。
job.split: 文件分块的相关信息,比如有数据分多少个块,块的大小 ( 默认 64m ) 等。
写完这三个文件之后 , 此方法会通过 RPC 调用 master 节点上的 JobTracker. submitJob( ) 方法,此时作业已经提交完成。
JobClient 里面使用 使用 RPC 机制来构造一个实现 JobSubmissionProtocol 接口的 JobTracker 的 代理,然后利用远程发放直接执行 JobTracker 里的 submitJob 。
- JobTracker
JobClient 提交 job 后, JobTracker 会创建一个 JobInProgress 来跟踪和调度这个 job ,并把它添加到 job 队列里。 JobInProgress 会根据提交的 job jar 中定义的输入数据集(已分解成 FileSplit )创建对应的一批 TaskInProgress 用于监控和调度 MapTask 和 ReduceTask 。