This commit is contained in:
LingZhaoHui 2024-12-08 20:17:56 +08:00
parent a4d7a59eaa
commit 2296c26713
Signed by: zeekling
GPG Key ID: D96E4E75267CA2CC

View File

@ -1,16 +1,18 @@
# 简介
# 一、简介
![pic](https://pan.zeekling.cn/zeekling/hadoop/yarn_00002.png)
# 源码解析
# 二、源码解析
Capacity 调度器的核心类是CapacityScheduler。在初始化CapacityScheduler的时候在构造函数initAsyncSchedulingProperties里面会初始化调度器相关。
核心类是AsyncSchedulingConfiguration主要内容总结为初始化异步调度器线程AsyncScheduleThread可以初始化多个调度支持多线程。
AsyncScheduleThread继承自Thread核心是循环调度调度的核心函数为schedule。
## schedule函数
## 1、异步调度
### 1.1 schedule函数
一般情况下,满足下面条件的节点不会被分配资源:
- 心跳超时的节点心跳超时的节点一般认为是可能已经dead了。为了可靠性考虑不给此类节点分配Container。
@ -18,14 +20,14 @@ AsyncScheduleThread继承自Thread核心是循环调度调度的核心函
上述判断的核心实现函数为shouldSkipNodeSchedule。
## 资源分配方式
### 1.2 资源分配方式
资源分配方式分为:
- 按照节点分配资源
- 按照标签进行分配
#### 按照节点分配资源
#### 1.2.1 按照节点分配资源
- 随机产生一个随机数范围是0 ~ allNode.size。
- 优先从下标为[start, end)的节点中分配资源。
@ -60,7 +62,7 @@ for (FiCaSchedulerNode node : nodes) {
}
```
#### 按照标签进行分配
#### 1.2.2 按照标签进行分配
- 随机产生一个随机数范围是0 ~ partitions.size。
@ -100,14 +102,17 @@ for (String partition : partitions) {
}
```
## 资源分配具体实现
## 2、同步调度
## 3、资源分配具体实现
资源分配的核心实现函数为allocateContainersToNode。首先检查当前节点是否存在运行时预留的资源优先处理运行时预留资源。
### 运行时预留
## 4、运行时预留
### 资源分配
## 5、资源分配
对于可用资源和可kill的资源加和小于最小资源的时候不会再进行资源分配或者资源预留了因为资源肯定是不足的。
@ -140,7 +145,7 @@ assignment.setSchedulingMode(SchedulingMode.IGNORE_PARTITION_EXCLUSIVITY);
submitResourceCommitRequest(getClusterResource(), assignment);
```
#### assignContainers
### 5.1 assignContainers
根队列的实现类为AbstractParentQueue.java。低版本的实现类为ParentQueue.java