赞
踩
前言 :本文旨在理清在Hadoop中一个MapReduce作业(Job)在提交到框架后的整个生命周期过程,权作总结和日后参考,如有问题,请不吝赐教。本文不涉及Hadoop的架构设计,如有兴趣请参考相关书籍和文献。在梳 理过程中,我对一些感兴趣的源码也会逐行研究学习,以期强化基础。
作者 :Jaytalent
开始日期 :2013年9月9日参考资料:【1】《Hadoop技术内幕--深入解析MapReduce架构设计与实现原理》董西成【2】 Hadoop 1.0.0 源码
Collection<JobInProgress> jobQueue = jobQueueJobInProgressListener.getJobQueue();
对于FIFO调度器而言,队列即为对应监听器中使用的作业队列。然后,声明一个列表,用于保存选择的任务:
- // Assigned tasks
- List<Task> assignedTasks = new ArrayList<Task>();
接下来,计算队列中正在运行的和等待运行的map和reduce任务的数量:
- // Compute (running + pending) map and reduce task numbers across pool
- int remainingReduceLoad = 0;
- int remainingMapLoad = 0;
- synchronized (jobQueue) {
- for (JobInProgress job : jobQueue) {
- if (job.getStatus().getRunState() == JobStatus.RUNNING) {
- remainingMapLoad += (job.desiredMaps() - job.finishedMaps());
- if (job.scheduleReduces()) {
- remainingReduceLoad +=
- (job.desiredReduces() - job.finishedReduces());
- }
- }
- }
- }
其中,job.scheduleReduces方法判断当前map任务的总体进度是否满足reduce任务开始调度的条件,map任务完成的比例是否超过变量mapred.reduce.slowstart.completed.maps的值,若超过则计算reduce任务的剩余任务数。接下来,计算map和reduce任务的负载因子:
- // Compute the 'load factor' for maps and reduces
- double m
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。