hadoop之mapreduce

先看入口  JobClient.runJob(conf);这个函数,之后submitJob,最后调用submitJobInternal方法,接下来看这个方法

接下来就看jobTracker的submitJob方法

首先构造了一个处理中的job,JobInProgress job = new JobInProgress(jobId, this, this.conf);

该构造函数主要是把一些jar包拷到本地,并且设置一些任务属性。接下来是一系列合法性校验

1 任务对应的队列是否存在

2 权限检查

3 内存检查

如果校验不通过则加入到清理队列,销毁该任务,同时抛出异常

接受调用 private synchronized JobStatus addJob(JobID jobId, JobInProgress job) 方法

该方法主要是通过EagerTaskInitializationListener的jobAdded方法

jobInitQueue.add(job); 加入初始化队列
 resortInitQueue(); 根据优先级和创建时间排序

这样客户端的任务就提交成功了

接下来的任务就是怎么把该job拆分成Task

很明显肯定是一个线程去处理这个初始化队列,把job转换成task,接下来具体看

 EagerTaskInitializationListener这个类,它有以下内部类 JobInitManager管理JobInit,InitJob负责job分割成任务

 

 

 

 接下来看JobTracker的initJob方法,主要是调用了JobInProgress 的initTasks方法

该方法主要是把job拆分成很多的TaskInProgress 包括map reduce任务

 

回过来看是谁启动了初始化job的线程,看EagerTaskInitializationListener的start方法,以后台线程的形式跑初始化job

 

接下来看最最开始的入口jobTracker的offerService方法

 

 

接下来主要就是看 taskScheduler.start();了,主要有LimitTasksPerJobTaskScheduler  JobQueueTaskScheduler和TaskScheduler 后者是前者的父类,最后在JobQueueTaskScheduler的start方法中启动了 eagerTaskInitializationListener.start();即启动的分割job的线程

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值