
# 弹性资源池扩容或缩容
弹性资源池的"扩容"或"缩容"，本质上就是指调整资源池的"实际CUs"。
在弹性资源池中：
- 实际CUs：弹性资源池当前分配的实际资源大小（单位CUs）。即实际拥有的计算资源数量。
  弹性资源池使用实际CUs计费：
  - 如果是按需计费模式，那么按照实际CUs大小收费。参考[弹性资源池计费模式说明](https://support.huaweicloud.com/price-dli/dli_12_0004.html)。
  
  - 如果是包年/包月计费模式，那么规格的部分按包周期计费，（实际CUs-规格）的部分按需计费。为了满足该场景下更优惠的计费，则可以通过规格变更的方式，将弹性资源池的规格扩大到与实际CUs一致，则所有实际CUs按包周期计费，整体相比原来更优惠。详细操作指导请参考[弹性资源池规格变更](https://support.huaweicloud.com/usermanual-dli/dli_01_0524.html)。
    
- 弹性资源池扩容：就是增加实际CUs，即资源池的计算资源数量变大。扩容的最大值就是弹性资源池CU范围的最大值。
- 弹性资源池缩容：就是减少实际CUs，即资源池的计算资源数量变小。缩容的最小值就是弹性资源池CU范围的最小值。
即弹性资源池的实际CUs会在CU范围的最小值和最大值之间动态变化。
了解更多弹性资源池的基本概念请参考[基本概念](https://support.huaweicloud.com/productdesc-dli/dli_07_0003.html)。
#### 约束与限制
- 当弹性资源池中添加队列、删除队列时，会触发弹性资源扩或缩容。
- 而弹性资源池缩容可能会触发缩容含有shuffle数据的节点，会导致Spark Task重算，引起Spark作业和SQL作业内部自动重试，当作业重试超过限制会导致作业执行失败，需用户重新执行作业。
- Spark2.3版本作业需要升级作业版本后才能支持运行中动态缩容功能。
- Spark Streaming作业、Flink作业在运行过程中所在节点无法缩容，需要暂停作业或迁移作业至其他弹性资源池后才能完成缩容。
- 以下操作触发的扩容和缩容均在操作后的下一个整点生效：
  - 调整队列的CU范围
  
  - 弹性资源池规格变更
  
  - 弹性资源池的CU设置
   
- 通过增加队列调整弹性资源池的实际CUs，立即生效。
 
#### 弹性资源池扩容或缩容的触发方式
表1弹性资源池扩容或缩容的触发方式 
| 操作类型 | 实际CUs变化 | 触发方式                                                                |
|:---|:---|:---|
| 扩容   | 实际CUs增加 | max{（min\[sum（队列maxCU），弹性资源池maxCU\]）, 弹性资源池minCU} \> 当前实际CUs，系统自动扩容 |
| 缩容   | 实际CUs减少 | max{（min\[sum（队列maxCU），弹性资源池maxCU\]）, 弹性资源池minCU} \< 当前实际CUs，系统自动缩容 |
   
详细的计算说明请参考[图1]。
 #### 弹性资源池的实际CUs的计算公式
弹性资源池的实际CUs要满足以下三个条件：
- 即满足所有队列需求。
- 确保不超过资源池的上限。
- 确保不低于资源池的下限。
图1弹性资源池的实际CUs的计算公式   
![](https://support.huaweicloud.com/usermanual-dli/zh-cn_image_0000002363450016.png "点击放大")
#### 示例
本节操作介绍不同计费模式的弹性资源池扩容和缩容的示例：
- [包年包月弹性资源池扩容]
  - **场景：**
    - 弹性资源池当前规格：64CUs
    
    - 弹性资源池CU范围：64CUs - 128CUs
    
    - 弹性资源池实际CUs：64CUs
    
    - 弹性资源池目标：扩容到128CUs
     
  
  - **操作步骤：**
    1. 调大现有队列的最大CU或增加新队列，使队列CU总和=128CUs。 在下一个整点，系统自动比较"实际CUs"和"max{（min\[sum（队列maxCU），弹性资源池maxCU\]）, 弹性资源池minCU} "
       如果max{（min\[sum（队列maxCU），弹性资源池maxCU\]）, 弹性资源池minCU} \> 当前实际CUs，系统触发扩容，扩容后的实际CUs的计算方法请参考[图1]。
       
    
    2. 变更弹性资源池的规格：
       1. 在DLI管理控制台左侧，选择"资源管理 \> 弹性资源池"。
       
       2. 选择需要扩容的弹性资源池，单击"操作"列"更多"中的"包周期CU变更"。
       
       3. 在"包周期CU变更"页面，"变更方式"选择"扩容"，将规格从64CUs调整为128CUs。
        
    
    3. 实际CUs变为128CUs，CU范围最小值自动同步为128CUs。
     
  
  - **结果：**
    弹性资源池实际CUs：128CUs
    弹性资源池CU范围：128CUs - 128CUs
    
   
- [包年包月弹性资源池缩容]
  - **场景：**
    - 弹性资源池当前规格：128CUs
    
    - 弹性资源池CU范围：128CUs - 128CUs
    
    - 弹性资源池实际CUs：128CUs
    
    - 弹性资源池目标：缩容到64CUs
     
  
  - **操作步骤：**
    1. 调小队列的最大CU或删除部分队列，使队列CU总和等于64CUs。 在下一个整点，系统自动比较"实际CUs"和"max{（min\[sum（队列maxCU），弹性资源池maxCU\]）, 弹性资源池minCU} "
       如果max{（min\[sum（队列maxCU），弹性资源池maxCU\]）, 弹性资源池minCU} \< 当前实际CUs，系统触发缩容，但是由于规格仍为128CUs，实际CUs不会自动下降。
       因此还需继续执行下一步骤。
       
    
    2. 变更弹性资源池的规格，将规格从128CUs调整为64CUs。
       1. 在DLI管理控制台左侧，选择"资源管理 \> 弹性资源池"。
       
       2. 选择需要扩容的弹性资源池，单击"操作"列"更多"中的"包周期CU变更"。
       
       3. 在"包周期CU变更"页面，"变更方式"选择"缩容"，将规格从128CUs调整为64CUs。
        
    
    3. 手动将弹性资源池CU范围改成64CUs-128CUs
    
    4. 实际CUs变为64CUs（下一个整点生效）
     
  
  - **结果：**
    弹性资源池实际CUs：64CUs
    弹性资源池CU范围：64CUs-128CUs
    
   
- [按需计费弹性资源池扩容]
  - **场景：**
    - 弹性资源池CU范围：64CUs- 128CUs
    
    - 弹性资源池实际CUs：64CUs
    
    - 弹性资源池目标：扩容到96CUs
     
  
  - **操作步骤：**
    1. 调大现有队列的最大CU或增加新队列，使队列CU总和=96CUs。
    
    2. 系统触发扩容，实际CUs变为max{（min\[sum（队列maxCU），弹性资源池maxCU\]）, 弹性资源池minCU} 。
    
    3. 实际CUs自动上升为96CUs。
     
  
  - **调整后：**
    - 弹性资源池实际CUs：96CUs
    
    - 弹性资源池CU范围：64CUs - 128CUs
    
    
    按需资源池的实际CUs随队列CU总和动态变化。
    
   
- [按需计费弹性资源池缩容]
  - **场景**
    - 弹性资源池CU范围：64CUs - 128CUs
    
    - 弹性资源池实际CUs：96CUs
    
    - 弹性资源池目标：缩容到64CUs
     
  
  - **操作步骤**
    1. 调小队列的最大CU或删除部分队列，使队列CU总和等于64CUs。
    
    2. 系统触发缩容，实际CUs下降为max{（min\[sum（队列maxCU），弹性资源池maxCU\]）, 弹性资源池minCU} 。
    
    3. 实际CUs自动下降为64CUs。
     
  
  - **结果：**
    - 弹性资源池实际CUs：64CUs
    
    - 弹性资源池CU范围：64CUs - 128CUs
     
  
  
  按需资源池缩容也无需手动变更规格。
