弹性资源池相关基本概念
本节介绍弹性资源池实际CUs、已使用CUs、CU范围、包周期CU(规格)的含义。
关系图和相关约束
- 实际CUs在CU范围的[最小值, 最大值]区间内变化。
- 当实际CUs ≤ 包周期CU时,全部按包周期单价计费,无按需费用。
- 当实际CUs > 包周期CU时,差额按按需单价每小时补收。
图1 DLI实际CUs 、已使用CUs、CU范围、包周期CU关系图
弹性资源池CU设置相关约束:
- 弹性资源池CU范围minCU小于等于实际CUs,如果扩容时minCU的目标值大于实际CUs,需要先扩容实际CUs,否则修改失败。
- 弹性资源池中所有队列的最小CU数之和需要小于等于弹性资源池的最小CU数。
- 弹性资源池中任意一个队列的最大CU必须小于等于弹性资源池的最大CU。
- 调整队列的CU范围、弹性资源池包周期CU变更、弹性资源池的CU设置,均在下一个整点生效。
- 通过增加队列调整弹性资源池的实际CUs,立即生效。
已使用CUs
图2 已使用CUs
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(规格)范围内所有资源均按照包年包月计费,相比变更前(部分按需计费)更优惠。
详细操作指导请参考弹性资源池规格变更。
图3 弹性资源池包年/包月+按需计费模式 | 成本优化示例
队列相关基本概念
本节介绍弹性资源池队列类型、实际CUs、已使用CUs、队列扩缩容策略中最小CUs和最大CUs的含义。
队列类型
队列是DLI中被实际使用和分配的基本单元,即队列是执行作业所需的具体的计算资源。您可以为不同的作业或数据处理任务创建不同的队列,并按需对这些队列分配和调整资源。
DLI弹性资源池之间为物理集群隔离,同一个弹性资源池中的队列之间为逻辑隔离。
建议您对测试业务场景和生产业务场景分别创建弹性资源池,通过资源物理隔离的方式,保障资源管理的独立性和安全性。
DLI分为三种队列类型: default队列、SQL队列、通用队列,您可以根据业务场景和作业特性选择最合适的队列类型。
- default队列:
DLI服务预置的队列,所有用户共享。
不支持指定default队列资源大小,资源在执行作业时按需分配,并按实际扫描的数据量计费。
由于default队列是共享资源,在使用时可能会出现资源抢占的情况,不能保证每次都能获得资源来执行作业。
default队列适用小规模或临时的数据处理需求。对于重要的或需要保证资源的作业,建议购买弹性资源池并在弹性资源池中创建队列来执行作业。
- SQL队列:
SQL队列是用于执行SQL作业的队列,支持Spark引擎。
SQL队列适用于需要快速数据查询和分析,以及需要定期清理缓存或重置环境的业务。
表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
队列的最小CUs、最大CUs是在创建队列时设置的队列扩缩容策略。是队列扩缩容的“安全栅栏”,队列的实际CUs在这个区间内变化,避免队列无限制的扩缩容。
队列的最大CU直接影响弹性资源池实际CUs分配,如果队列的最大CU设置过大,导致弹性资源池实际CUs超出弹性资源池的包周期CUs(规格),超出部分将按需计费。
如需降低该场景下的整体成本,则可以通过弹性资源池规格变更的操作,扩大弹性资源池的包周期CU(规格)。
规格变更成功后,新的包周期CU(规格)范围内所有资源均按照包年包月计费,相比变更前(部分按需计费)更优惠。
数据库
数据库即按照数据结构来组织、存储和管理数据的仓库。DLI服务管理权限的基础单元是数据库,赋权以数据库为单位。
在DLI中,表和数据库是定义底层数据的元数据容器。表中的元数据让DLI知道数据所在的位置,并指定了数据的结构,例如列名称、数据类型和表名称。数据库是表的逻辑分组。
OBS表、DLI表、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自动回收。这个指定的时间就是生命周期。生命周期管理功能方便您释放存储空间,简化回收数据的流程。同时提供数据备份与恢复功能,避免因误操作丢失数据。