自动缩放 Azure Synapse Analytics Apache Spark 池

Azure Synapse Analytics Apache Spark 池的自动缩放功能自动缩放群集实例中的节点数。 在创建新的 Azure Synapse Analytics Apache Spark 池的过程中,如果已选中自动缩放,可设置最小和最大节点数(最多 200 个节点)。 自动缩放功能随后监视负载的资源需求,并增加或减少节点数。 此功能不会产生额外费用。

指标监视

自动缩放会持续监视 Spark 实例并收集以下指标:

指标 说明
总待处理 CPU 开始执行所有待处理作业所需的核心总数。
总待处理内存 开始执行所有待处理作业所需的总内存(以 MB 为单位)。
总可用 CPU 活动节点上所有未使用核心的总和。
总可用内存 活动节点上未使用内存的总和(以 MB 为单位)。
每个节点的已使用内存 节点上的负载。 使用了 10 GB 内存的节点的负载会被认为比使用了 2 GB 内存的工作节点的负载更大。

每 30 秒检查一次上述指标。 自动缩放将根据这些指标做出纵向扩展和纵向缩减决策。

基于负载的缩放条件

检测到以下情况时,自动缩放将发出缩放请求:

纵向扩展 纵向缩减
总待处理 CPU 大于总可用 CPU 的时间超过 1 分钟。 总待处理 CPU 小于总可用 CPU 的时间超过 2 分钟。
总待处理内存大于总可用内存的时间超过 1 分钟。 总待处理内存小于总可用内存的时间超过 2 分钟。

对于纵向扩展,Azure Synapse 自动缩放服务将计算需要多少个新节点才能满足当前 CPU 和内存需求,然后发出纵向扩展请求来添加所需数量的节点。

对于纵向缩减,根据执行程序数、每个节点的应用程序主机以及当前 CPU 和内存需求,自动缩放会发出删除特定数量节点的请求。 此服务还会根据当前作业执行情况,检测待删除的节点。 纵向缩减操作首先关闭节点,然后将其从群集中删除。

注意

有关更新和强制将自动缩放配置应用于现有 Spark 池的说明。 如果在 Azure 门户中启用了“强制应用新设置”或者在 PowerShell 中启用了 ForceApplySetting,则会终止所有现有 Spark 会话,并立即应用配置更改。 如果未选择此选项,则配置将应用于新的 Spark 会话,并且不会终止现有会话。

入门

使用自动缩放功能创建无服务器 Apache Spark 池

若要启用自动缩放功能,请在正常池创建过程中完成以下步骤:

  1. 在“基本信息”选项卡上,选中“启用自动缩放”复选框。

  2. 为以下属性输入所需的值:

    • 最小节点数。
    • 最大节点数。

初始节点数将为最小值。 此值定义创建实例时实例的初始大小。 最小节点数不能少于三个。

或者,如果执行程序要求在 Spark 作业的不同阶段大不相同,或者已处理的数据量随时间波动,可选择启用执行程序的动态分配。 通过启用执行程序的动态分配,可根据需要使用容量。

启用动态分配时,它允许作业在指定的最小和最大执行程序数范围内缩放执行程序数。

Apache Spark 可通过以下代码配置执行程序的动态分配:

    %%configure -f
    {
        "conf" : {
            "spark.dynamicAllocation.maxExecutors" : "6",
            "spark.dynamicAllocation.enabled": "true",
            "spark.dynamicAllocation.minExecutors": "2"
     }
    }

通过代码指定的默认值将替代通过用户界面设置的值。

在此示例中,如果作业只需要 2 个执行程序,它将仅使用 2 个执行程序。 当作业需要更多执行程序时,它将扩展到 6 个执行程序(1 个驱动程序,6 个执行程序)。 当作业不需要执行程序时,它将停用执行程序。 如果它不需要节点,它将释放节点。

注意

maxExecutors 将保留配置的执行程序数。 结合示例来看,即使你仅使用 2 个执行程序,它也将保留 6 个执行程序。

因此,启用动态分配后,执行程序将根据执行程序的利用率纵向扩展或缩减。 这可确保根据正在运行的作业的需要来预配执行程序。

最佳做法

请考虑纵向扩展或纵向缩减操作的延迟

完成缩放操作可能需要 1 到 5 分钟。

准备进行纵向缩减

在实例纵向缩减过程中,自动缩放会使节点处于解除授权状态,以便不会在该节点上启动新的执行程序。

正在运行的作业将继续运行并完成。 挂起作业将和往常一样等待调度,可用节点更少。

注意

默认情况下,spark.yarn.executor.decommission.enabled 设置为 true,这会使未充分利用的节点自动关闭以优化计算效率。 如果更希望进行不太激进的纵向缩减,则可以将此配置设置为 false。

后续步骤

设置新 Spark 池快速入门创建 Spark 池