MapReduce作业运行过程

 JobClient的runJob()方法:新建JobClient实例,并调用其submitJob()方法。提交作业后,runJob()每秒轮询作业进度,如果发现上次上报后信息有改动,则把进度报告输出到控制台。作业完成,成功则显示作业计数器;失败则输出错误到控制台。

 

(一)JobClient的submitJob()的作业提交过程

1. 向JobTracker请求一个新jobID,通过JobTracker的getNewJobId()获取;

2. 检查作业输出说明。例如,如果没有指定输出目录或者已经存在,作业将不会被提交,错误返回给MR程序;

3. 计算作业输出划分split。如果划分无法计算(eg.输入路径不存在),作业将不会被提交,错误返回给MR程序;

4. 将运行作业所需要的资源(作业的jar文件、配置文件、计算所得的输入划分)复制到一个以作业ID命名的目录中JobTracker的文件系统。如果作业jar的副本很多,在TaskTracker运行作业任务时,集群可以提供多副本访问(图中step3);

5. 通过调用JobTracker的submitJob()方法,告诉JobTracker作业准备执行(图中step4);

6. JobTracker接收到submitJob()方法调用后,把此调用放到一个内部队列中,交由作业调度器进行调度,并对其进行初始化(包括创建一个代表该正在运行的作业对象,负责封装任务和记录信息,以便跟踪任务的状态和进程)。(图中step5)

7. 创建运行任务列表,作业调度去首先从共享文件系统中获取JobClient已经计算好的输入划分信息(图中step6),然后为每个划分创建一个Map任务(一个split对应一个map,有多少split就有多少map)。创建的Reduce任务的数量由JobConf的mapred.reduce.tasks属性决定,其用setNumReduceTasks()方法设定,然后调度器便创建指定个数的Reduce来运行任务,任务在此时指定ID

8. TaskTracker执行一个简单的循环,定期发送心跳(heartbeat)调用JobTracker,心跳告诉JobTrackder是否存活以及充当消息通道。(图中step7)

 

(二)TaskTracker分配任务之后的任务运行过程

1. 作业JAR文件本地化:从共享文件系统复制到TaskTracker。并且应用程序全部文件从分布式缓存复制到本地磁盘;

2. 为任务新建一个本地工作目录,JAR文件内容会被解压到此目录;

3.新建一TaskRunner实例运行此任务。TaskRunner启动一个新的JVM(图中step9-10)来运行每个任务。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值