您的位置:首页 > 运维架构

Hadoop0.21.0源码流程分析(1)-客户端提交作业

2011-05-27 20:50 866 查看
流程图




函数调用关系图




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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: