Hadoop调度算法CapacityScheduler源码分析(1)

本文深入分析Hadoop的CapacityScheduler调度器的核心算法流程,包括选择队列、作业和任务的策略。通过TaskSchedulingMgr类及其子类MapSchedulingMgr和ReduceSchedulingMgr的详细描述,揭示了如何在资源有限的情况下,根据作业优先级和资源使用率进行任务分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


核心算法流程

当某个tasktracker上出现空闲slot时,调度器依次选择一个queue、(选中的queue中的)job、(选中的job中的)task,并将该slot分配给该task。下面介绍选择queue、job和task所采用的策略:

(1)选择queue:将所有queue按照资源使用率(numSlotsOccupied/capacity)由小到大排序,依次进行处理,直到找到一个合适的job。

(2)选择job:在当前queue中,所有作业按照作业提交时间和作业优先级进行排序(假设开启支持优先级调度功能,默认不支持,需要在配置文件中开启),调度依次考虑每个作业,选择符合两个条件的job:[1] 作业所在的用户未达到资源使用上限 [2] 该TaskTracker所在的节点剩余的内存足够该job的task使用。

(3)选择task,同大部分调度器一样,考虑task的locality和资源使用情况。(即:调用JobInProgress中的obtainNewMapTask()/obtainNewReduceTask()方法)

参考自:http://dongxicheng.org/mapreduce/hadoop-capacity-scheduler/

CapacityScheduler辅助类

类的静态结构

CapacityTaskScheduler是核心类,我们先看它的辅助类

CapacityTaskScheduler的辅助类都是内部类,下面逐个描述:

(1)TaskSchedulingMgr类

它是任务调度管理,抽象类,包括三个成员:

protected CapacityTaskScheduler scheduler;
protected TaskType type = null;
privateList<CapacitySchedulerQueue> queuesForAssigningTasks =  
                                newArrayList<CapacitySchedulerQueue>();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值