更新时间:2024-10-11 GMT+08:00
分享

DLI弹性资源池与队列简介

DLI的计算资源是执行作业的基础,本节内容介绍DLI计算资源的模式和队列类型。

什么是弹性资源池和队列?

在了解DLI计算资源模式前首先了解弹性资源池和队列的基本概念。

  • 弹性资源池是DLI计算资源的一种池化管理模式,可以看做DLI计算资源的集合。DLI支持在弹性资源池中创建多个队列,且这些队列可以共享弹性资源池中的资源。
  • 队列是DLI中被实际使用和分配的基本单元,即队列是执行作业所需的具体的计算资源。您可以为不同的作业或数据处理任务创建不同的队列,并按需对这些队列分配和调整资源。了解DLI的队列类型请参考DLI队列类型

DLI计算资源模式

DLI提供了三种计算资源的管理模式,每一种模式都有独特的优势和适用场景。

图1 DLI计算资源模式
  • 弹性资源池模式:计算资源的池化管理模式,提供计算资源的动态扩缩容能力,同一弹性资源池中的队列共享计算资源。通过合理设置队列的计算资源分配策略,可以提高计算资源利用率,应对业务高峰期的资源需求。
    • 适用场景:适合业务量有明显波动的场合,如周期性的数据批处理任务或实时数据处理需求。
    • 支持的队列类型:SQL队列(Spark)、SQL队列(HetuEngine)、通用队列。了解DLI的队列类型请参考DLI队列类型

      弹性资源池模式的通用队列和SQL队列不支持跨可用区。

    • 使用方法:先创建弹性资源池,然后在弹性资源池中创建队列并分配计算资源,队列关联到具体的作业和数据处理任务。

      购买弹性资源池并在弹性资源池中添加队列的具体操作步骤请参考创建弹性资源池在弹性资源池中添加队列

  • 全局共享模式:

    全局共享模式是一种根据SQL查询中实际扫描的数据量来分配计算资源的模式,不支持指定或预留计算资源。

    DLI服务预置的“default”队列即为全局共享模式的计算资源,资源的大小是按需分配的。在不确定数据量大小或偶尔需要进行数据处理的用户,可以使用default队列执行作业。

    • 适用场景:适用于测试作业或资源消耗不高的情况。
    • 支持的队列类型:仅DLI预置的default队列为全局共享模式的计算资源。

      “default”队列只用于用户体验DLI,是所有人共享的公共资源,使用时可能会出现用户间抢占资源的情况,不能保证每次都可以得到资源执行相关操作。建议使用自建队列执行生产作业。

    • 使用方法:default队列仅适用于提交SQL作业,在DLI管理控制台提交SQL作业时选择"default队列"即可。
  • 非弹性资源池模式(废弃,不推荐使用)

    DLI的上一代计算资源管理方式,因缺乏灵活性,目前已不推荐使用。

    非弹性资源池模式提供固定规格的计算资源,购买后独占资源,无法根据需求动态调整,可能会导致资源浪费或在需求高峰期资源不足。

表1 DLI计算资源模式与支持的队列类型

DLI计算资源模式

支持的队列类型

资源特点

适用场景

弹性资源池模式

SQL队列(Spark)

SQL队列(HetuEngine)

通用队列

单用户多队列共享资源

资源动态分配,灵活调整

适合业务需求波动较大,需要灵活调整资源以应对波峰波谷的业务场景。

全局共享模式

default队列

多用户多队列共享资源

按量付费,不支持预留资源

适合不确定数据量大小或仅需要偶尔进行数据处理的临时或测试项目场景。

非弹性资源池模式

(废弃,不推荐使用)

SQL队列

通用队列

单用户单队列独享资源

无法动态调整,资源可能会闲置

废弃,不推荐使用

为了便于理解DLI不同计算资源模式的适用场景,我们把购买DLI计算资源比作用车服务:

  • 弹性资源池模式可以比作“租车”,您可以根据实际需求动态调整资源的规模。

    这种模式适合于业务需求波动较大的场景,灵活地根据业务峰谷来调整资源,优化成本。

  • 全局共享模式可以比作“打车”,您只需为实际使用的数据量付费。

    这种模式适合于不确定数据量大小或仅需要偶尔进行数据处理的场景,按需使用资源,无需预先购买或预留资源。

DLI队列类型

DLI分为三种队列类型: default队列、SQL队列、通用队列,您可以根据业务场景和作业特性选择最合适的队列类型。

  • default队列:

    DLI服务预置的队列,所有用户共享。

    不支持指定default队列资源大小,资源在执行作业时按需分配,并按实际扫描的数据量计费。

    由于default队列是共享资源,在使用时可能会出现资源抢占的情况,不能保证每次都能获得资源来执行作业。

    default队列适用小规模或临时的数据处理需求。对于重要的或需要保证资源的作业,建议购买弹性资源池并在弹性资源池中创建队列来执行作业。

  • SQL队列:

    SQL队列是用于执行SQL作业的队列,支持指定引擎类型包括Spark和HetuEngine。

    SQL队列适用于需要快速数据查询和分析,以及需要定期清理缓存或重置环境的业务。

  • 通用队列:

    通用队列用于执行Spark作业、Flink OpenSource SQL作业和Flink Jar作业的队列。

    适合适用于复杂数据处理、实时数据流处理或批量数据处理的场景。

弹性资源池使用场景

推荐使用弹性资源池队列,提高资源使用的灵活性和资源利用效率。本节介绍常见的弹性资源池的使用场景。

场景一:固定资源造成资源浪费和资源不足的场景

在每天的不同时段,作业任务对资源的请求量也会发生变化,如果采用固定资源规格则会导致资源浪费或者资源不足的问题。例如,如下图图2示例可以看出:

  • 大约在凌晨4点到7点这个数据段,ETL作业任务结束后没有其他作业,因为资源固定一直占用,导致严重的资源浪费。
  • 上午9点到12点以及下午14点16点的两个时段,ETL报表和作业查询的请求量很高,因为当前固定资源不够,导致作业任务排队,任务一直排队。
    图2 固定资源场景

场景二:资源相互隔离,没有共享,造成资源浪费的场景

某公司下有两个部门,两个部门的不同作业运行在DLI的两个队列上。部门A在上午8点到12点业务比较空闲,资源有剩余,部门B在这个时间段业务请求量大,原有资源规格满足不了,需要扩容时,请求不了部门A的队列资源,造成资源浪费。
图3 资源隔离造成的资源浪费

弹性资源池通过“分时按需弹性”功能,支持按照不同时间段对资源进行动态的扩缩容,保证资源的利用率和应对资源洪峰等诉求。

弹性资源池对后端资源统一进行管理和调度,多个队列绑定弹性资源池后,资源池内资源共享,资源利用率高,解决了场景二的问题。

相关文档