
# 基本概念
#### 弹性资源池相关基本概念
本节介绍弹性资源池实际CUs、已使用CUs、CU范围、包周期CU（规格）的含义。
#### 关系图和相关约束
- 实际CUs在CU范围的\[最小值, 最大值\]区间内变化。
- 当实际CUs ≤ 包周期CU时，全部按包周期单价计费，无按需费用。
- 当实际CUs ＞ 包周期CU时，差额按按需单价每小时补收。
图1DLI实际CUs 、已使用CUs、CU范围、包周期CU关系图   
![](https://support.huaweicloud.com/productdesc-dli/zh-cn_image_0000002576331535.png "点击放大")
**弹性资源池CU设置相关约束**：
- 弹性资源池CU范围minCU**小于等于**实际CUs，如果扩容时minCU的目标值大于实际CUs，需要先扩容实际CUs，否则修改失败。
- 弹性资源池中所有队列的最小CU数之和需要小于等于弹性资源池的最小CU数。
- 弹性资源池中任意一个队列的最大CU必须小于等于弹性资源池的最大CU。
- 调整队列的CU范围、弹性资源池包周期CU变更、弹性资源池的CU设置，均在下一个整点生效。
- 通过增加队列调整弹性资源池的实际CUs，立即生效。
 
#### 实际CUs
- **实际CUs**是弹性资源池当前分配的可用于运行作业的计算资源总量（单位CUs）。同时作为计费的直接依据。
- **实际CUs** 的计算规则：
  - 当资源池中没有队列时：实际CUs等于弹性资源池的最小CU。
  
  - 当资源池中有队列时，实际CUs的计算公式：
    - 实际CUs=max{（min\[sum（队列maxCU），弹性资源池maxCU\]）, 弹性资源池minCU} 。 ![](https://support.huaweicloud.com/productdesc-dli/zh-cn_image_0000002519940441.png "点击放大")
      
    
    - 计算结果需满足为16CUs的倍数，如果不能整除16CUs则向上取整。
     
   
- **计费模式：**
  表1计费模式 
  | **计费模式** | **计费对象**          | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                        |
  |:---|:---|:---|
  | 按需       | 按照实际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与弹性资源池扩容的关系**
  弹性资源池的"扩容"或"缩容"就是指调整资源池的"实际CUs"。
  了解[弹性资源池扩容或缩容](https://support.huaweicloud.com/usermanual-dli/dli_01_0686.html)和[实际CUs计算公式](https://support.huaweicloud.com/usermanual-dli/dli_01_0686.html)。
  
- **实际CUs的分配示例：**
  如[表2]所示，弹性资源池实际CUs分配的计算过程如下：
  1. 计算队列maxCU之和：sum（队列maxCU）= 32 + 56 = 88CUs。
  
  2. 比较队列maxCU之和与弹性资源池maxCU，两者取最小值：min（88CUs，112CUs） = 88CUs。
  
  3. 再与弹性资源池minCU做比较取最大值：max（88CUs，64CUs）=88CUs
  
  4. 检查88CUs是否为16CU的倍数，由于88不能被16整除，故向上取整为96CUs。
      表2弹性资源池实际CUs分配示例 
     | 场景说明                                                                                                                                                                                                                                                                                                                   | 资源类型  | CU范围      |
     |:---|:---|:---|
     | 新建弹性资源池64-112CUs 添加了两个队列，分别为队列A和队列B。两个队列设置的CU范围如下： - 队列A的CU范围：16-32CUs  - 队列B的CU范围：16-56CUs   | 弹性资源池 | 64-112CUs |
     | 新建弹性资源池64-112CUs 添加了两个队列，分别为队列A和队列B。两个队列设置的CU范围如下： - 队列A的CU范围：16-32CUs  - 队列B的CU范围：16-56CUs   | 队列A   | 16-32CUS  |
     | 新建弹性资源池64-112CUs 添加了两个队列，分别为队列A和队列B。两个队列设置的CU范围如下： - 队列A的CU范围：16-32CUs  - 队列B的CU范围：16-56CUs   | 队列B   | 16-56CUS  |
        
     
   
 
#### 已使用CUs
- **定义：**
  已使用CUs等于当前时刻真正被作业或任务占用且正在运行的CU数量。已使用CUs存在5分钟延迟。
  
- **与实际CUs的区别：**
  实际CUs是平台为该资源池分配的总量；已使用CUs是其中"正在跑任务"的那一部分。
  
- **约束与限制**
  Spark引擎、Flink引擎允许实际CUs \> 已使用CUs，差值即为"空闲可立即使用"部分。
  
图2已使用CUs   
![](https://support.huaweicloud.com/productdesc-dli/zh-cn_image_0000002576357255.png "点击放大")
#### CU范围
CU范围是弹性资源池扩缩容的"安全栅栏"，由"最小CU"和"最大CU"两条边界组成，弹性资源池的实际CUs在这个区间里自动伸缩，避免无限制的资源扩容风险。
计算实际CUs时，如果计算结果小于minCU则取minCU值为实际CUs的值；如果计算结果大于maxCU那么取maxCU为实际CUs的值。即实际CUs会始终保持在CU范围的区间内。
- **最小CU（minCU）**
  包周期模式下，购买弹性资源池时设置的最小CU即弹性资源池的包周期CU（规格），可通过"包周期CU变更"调高最小CU。
  **即当弹性资源池规格扩容时，CU范围的最小值与弹性资源池的包周期CU（规格）联动，当弹性资源池的规格变化后，CU范围的最小值会修改为与包周期CU（规格）一致，而最大CU 不变。**
  弹性资源池缩容时，实际CUs不会低于该值，确保总有资源可立即接管作业。
  弹性资源池中所有队列的最小CU数之和需要小于等于弹性资源池的最小CU数。
  
- **最大CU（maxCU）**
  弹性资源池中任意一个队列的最大CU必须小于等于弹性资源池的最大CU。
  弹性资源池至少可以满足弹性资源池中所有队列按最小CU运行，尽量满足队列按最大CU运行。
  
 
#### 包周期CU（规格）
包周期CU（规格）是使用包周期方式购买的CU量，购买弹性资源池时包周期CU（规格）即设置的CU范围的最小CU。
购买弹性资源池时选择的CU范围的最小值即弹性资源池规格。规格是包周期弹性资源池特有的。规格部分以包周期的计费，规格之外的部分按需计费。即将会产生包周期外的按需费用。
队列的最大CU直接影响实际CU分配，如果实际CUs超出规格，超出部分将按需计费。如需降低该场景下的整体成本，则可以通过**弹性资源池规格变更**的操作，扩大弹性资源池的包周期CU（规格）。规格变更成功后，新的包周期CU（规格）范围内所有资源均按照包年包月计费，相比变更前（部分按需计费）更优惠。
详细操作指导请参考[弹性资源池规格变更](https://support.huaweicloud.com/usermanual-dli/dli_01_0524.html)。
图3弹性资源池包年/包月+按需计费模式 \| 成本优化示例   
![](https://support.huaweicloud.com/productdesc-dli/zh-cn_image_0000002530430167.png "点击放大")
#### 队列相关基本概念
本节介绍弹性资源池队列类型、实际CUs、已使用CUs、队列扩缩容策略中最小CUs和最大CUs的含义。
#### 队列类型
队列是DLI中被实际使用和分配的基本单元，即队列是执行作业所需的具体的计算资源。您可以为不同的作业或数据处理任务创建不同的队列，并按需对这些队列分配和调整资源。
![](https://support.huaweicloud.com/productdesc-dli/public_sys-resources/note_3.0-zh-cn.png)
DLI弹性资源池之间为物理集群隔离，同一个弹性资源池中的队列之间为逻辑隔离。
建议您对测试业务场景和生产业务场景分别创建弹性资源池，通过资源物理隔离的方式，保障资源管理的独立性和安全性。
DLI分为三种队列类型： default队列、SQL队列、通用队列，您可以根据业务场景和作业特性选择最合适的队列类型。
- **default队列：**
  DLI服务预置的队列，所有用户共享。
  不支持指定default队列资源大小，资源在执行作业时按需分配，并按实际扫描的数据量计费。
  由于default队列是共享资源，在使用时可能会出现资源抢占的情况，不能保证每次都能获得资源来执行作业。
  default队列适用小规模或临时的数据处理需求。对于重要的或需要保证资源的作业，建议购买弹性资源池并在弹性资源池中创建队列来执行作业。
  
- **SQL队列：**
  SQL队列是用于执行SQL作业的队列，支持Spark引擎。
  SQL队列适用于需要快速数据查询和分析，以及需要定期清理缓存或重置环境的业务。
  

- **通用队列：**
  通用队列用于执行Spark作业、Flink OpenSource SQL作业和Flink Jar作业的队列。
  适合适用于复杂数据处理、实时数据流处理或批量数据处理的场景。
  
表3队列类型对比 
| 对比维度  | Default队列                                                                                                                                                                                                                                                                                                                     | SQL队列                                                                                                                                                                                                                                                                                                                                                                                                       | 通用队列                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|:---|:---|
| 资源保障  | - 可能出现资源抢占  - 按需分配资源                                                                                                                                               | 稳定资源保障                                                                                                                                                                                                                                                                                                                                                                                                      | 稳定资源保障                                                                                                                                                                                                                                                                                                                                                                                                      |
| 支持的引擎 | 不支持指定引擎类型                                                                                                                                                                                                                                                                                                                     | Spark                                                                                                                                                                                                                                                                                                                                                                                                       | 通用队列支持指定Flink或Spark引擎                                                                                                                                                                                                                                                                                                                                                                                       |
| 计费模式  | 按量付费                                                                                                                                                                                                                                                                                                                          | 按弹性资源池计费                                                                                                                                                                                                                                                                                                                                                                                                    | 按弹性资源池计费                                                                                                                                                                                                                                                                                                                                                                                                    |
| 作业类型  | SQL作业                                                                                                                                                                                                                                                                                                                         | 仅SQL作业                                                                                                                                                                                                                                                                                                                                                                                                      | Spark作业、Flink OpenSource SQL作业、Flink Jar作业                                                                                                                                                                                                                                                                                                                                                                  |
| 适用场景  | - 功能测试验证  - 开发环境调试  - 小规模数据处理  - 临时查询任务   | - 交互式SQL查询  - 数据分析报表  - 定期数据清洗  - BI工具对接  - 实时数据探索   | - 实时流处理  - 复杂ETL流程  - 机器学习训练  - 大规模数据分析  - 多阶段数据处理   |
   
#### 队列实际CUs
队列实际CUs是某一时刻已实际分配给指定队列且立即可用的计算资源总量。
队列实际CUs在CU范围的\[最小CUs, 最大CUs\]区间内随队列负载自动弹性。
#### 队列已使用CUs
- **定义：**
  队列已使用CUs等于当前时刻真正被作业或任务占用且正在运行的CU数量。已使用CUs存在5分钟延迟。
  

- **与实际CUs的区别：**
  实际CUs是平台为该队列分配的资源总量；已使用CUs是其中"正在跑任务"的那一部分。
  
 
#### 队列的最小CUs、最大CUs
队列的最小CUs、最大CUs是在创建队列时设置的队列扩缩容策略。是队列扩缩容的"安全栅栏"，队列的实际CUs在这个区间内变化，避免队列无限制的扩缩容。
队列的最大CU直接影响弹性资源池实际CUs分配，如果队列的最大CU设置过大，导致弹性资源池实际CUs超出弹性资源池的包周期CUs（规格），超出部分将按需计费。
如需降低该场景下的整体成本，则可以通过**弹性资源池规格变更**的操作，扩大弹性资源池的包周期CU（规格）。
规格变更成功后，新的包周期CU（规格）范围内所有资源均按照包年包月计费，相比变更前（部分按需计费）更优惠。
#### 数据库
数据库即按照数据结构来组织、存储和管理数据的仓库。DLI服务管理权限的基础单元是数据库，赋权以数据库为单位。
在DLI中，表和数据库是定义底层数据的元数据容器。表中的元数据让DLI知道数据所在的位置，并指定了数据的结构，例如列名称、数据类型和表名称。数据库是表的逻辑分组。
#### OBS表、DLI表、CloudTable表
不同表类型表示不同的数据存储位置。
- OBS表：表示数据存储在OBS服务的桶中。
- DLI表：表示数据存储在本服务内部的表中。 DLI存储资源是DLI服务内部存储的资源，用于存储数据库和DLI表，是向DLI导入数据的必备条件，体现用户数据存储在DLI中的数据量。
  
- CloudTable表：表示数据储存在CloudTable服务的表中。
可通过DLI创建表，与其他服务的数据进行关联，以此来实现不同数据源的联合查询分析。
#### 元数据
元数据（Metadata）是用来定义数据类型的数据。主要是描述数据自身信息，包含源、大小、格式或其它数据特征。数据库字段中，元数据用于诠释数据仓库的内容。
#### SQL作业
在SQL作业编辑器执行的SQL语句、导入数据和导出数据等操作，在系统中对应的执行实体，称之为SQL作业。
SQL作业适用于使用标准SQL语句进行查询的场景。通常用于结构化数据的查询和分析。
#### Flink作业
Flink作业专为实时数据流处理设计，适用于低时延、需要快速响应的场景。适用于实时监控、在线分析等场景。
- Flink OpenSource作业：提交作业时可以使用DLI提供的标准的连接器（connectors）和丰富的API，快速与其他数据系统的集成。
- Flink Jar作业：允许用户提交编译为Jar包的Flink作业，提供了更大的灵活性和自定义能力。适合需要自定义函数、UDF（用户定义函数）或特定库集成的复杂数据处理场景。可以利用Flink的生态系统，实现高级流处理逻辑和状态管理。
 
#### Spark作业
Spark作业是指用户通过可视化界面和RESTful API提交的作业，支持提交Spark Core/DataSet/MLlib/GraphX等Spark全栈作业。
#### CU
CU是DLI计算资源的单位。 1CU= 1Core 4GMem。不同规格的计算资源对应的计算能力不一样，规格越高计算能力越好。
#### 常量与变量
环境变量中，常量与变量的区别如下：
- 常量在程序运行过程中，所表示的值是无法被改变的。
- 变量是"可读、可写"，而常量是"只读"的。变量是在程序运行过程中，内部存储的值，随时可以被改变的一段内存地址。比如：int a ＝ 123，这里的a就是一个整型变量。
 
#### 表生命周期
DLI表数据的生命周期管理功能（dli.lifecycle.days），指表（分区）数据从最后一次更新的时间算起，在经过指定的时间后没有变动，则此表（分区）DLI自动回收。这个指定的时间就是生命周期。生命周期管理功能方便您释放存储空间，简化回收数据的流程。同时提供数据备份与恢复功能，避免因误操作丢失数据。
