Apache Spark for Azure Synapse Analytics 池的自动缩放功能会自动纵向扩展和缩减群集实例中的节点数。 在为 Azure Synapse Analytics 池创建新的 Apache Spark 时,如果选择自动缩放,则可以设置最少和最多 200 个节点。 自动缩放功能随后监视负载的资源需求,并增加或减少节点数。 此功能不收取额外费用。
指标监视
自动缩放会持续监视 Spark 实例并收集以下指标:
指标 | Description |
---|---|
总待处理 CPU | 开始执行所有挂起作业所需的核心总数。 |
总待处理内存 | 开始执行所有挂起作业所需的总内存(以 MB 为单位)。 |
总可用 CPU | 活动节点上所有未使用核心的总和。 |
总可用内存 | 活动节点上未使用内存的总和(以 MB 为单位)。 |
每个节点的已使用内存 | 节点上的负载。 使用了 10 GB 内存的节点的负载会被认为比使用了 2 GB 内存的工作节点的负载更大。 |
上述指标每 30 秒检查一次。 自动缩放将根据这些指标做出纵向扩展和纵向缩减决策。
基于负载的缩放条件
当检测到以下条件时,自动缩放将发出缩放请求:
纵向扩展 | 纵向缩减 |
---|---|
总待处理 CPU 大于总可用 CPU 的时间超过 1 分钟。 | 总待处理 CPU 小于总可用 CPU 的时间超过 2 分钟。 |
总待处理内存大于总可用内存的时间超过 1 分钟。 | 总待处理内存小于总可用内存的时间超过 2 分钟。 |
对于纵向扩展,Azure Synapse 自动缩放服务会计算满足当前 CPU 和内存要求所需的新节点数,然后发出纵向扩展请求以添加所需的节点数。
对于缩减,根据执行程序数、每个节点的应用程序主机数、当前 CPU 和内存要求,自动缩放会发出删除某些节点的请求。 此服务还会根据当前作业执行情况,检测待删除的节点。 纵向缩减操作首先关闭节点,然后将其从群集中删除。
注释
有关更新和强制将自动缩放配置应用到现有 Spark 池的注释。 如果在 Azure 门户或 ForceApplySetting
中启用强制新设置,则会终止所有现有的 Spark 会话,并立即应用配置更改。 如果未选择此选项,则配置将应用于新的 Spark 会话,并且不会终止现有会话。
开始
使用自动缩放创建无服务器 Apache Spark 池
若要启用自动缩放功能,请在正常池创建过程中完成以下步骤:
在“基本信息”选项卡上,选中“启用自动缩放”复选框。
为以下属性输入所需的值:
- 最小节点数。
- 最大节点数。
初始节点数将为最小值。 此值定义创建实例时实例的初始大小。 最小节点数不能少于三个。
(可选)可以在执行程序需求在 Spark 作业的各个阶段差异很大的情况下启用执行程序的动态分配,或者处理的数据量随着时间变化而波动的情况下启用。 通过启用执行器的动态分配,我们可以根据需要利用容量。
启用动态分配时,作业可以在指定的执行器最小数目和最大数目之间调整执行程序的数量。
Apache Spark 通过代码启用对执行器的动态分配,如下所示:
%%configure -f
{
"conf" : {
"spark.dynamicAllocation.maxExecutors" : "6",
"spark.dynamicAllocation.enabled": "true",
"spark.dynamicAllocation.minExecutors": "2"
}
}
通过代码指定的默认值将覆盖通过用户界面设置的值。
在此示例中,如果作业只需要两个执行程序,则它仅使用两个执行程序。 当作业需要更多时,它将扩展到六个执行程序(一个驱动程序,六个执行程序)。 当作业不再需要执行器时,它将注销执行器。 如果不需要这个节点,它将释放该节点。
注释
maxExecutors 将保留配置的执行程序数。 考虑到此示例,即使只使用 2,它也会保留 6。
因此,在启用动态分配时,执行程序会根据执行器的利用率纵向扩展或缩减。 这可确保根据运行的作业需求预配执行程序。
最佳做法
考虑扩展或缩减操作的延迟
缩放操作可能需要 1 到 5 分钟才能完成。
准备进行纵向缩减
在实例缩减过程中,自动缩放会将节点置于退役状态,以便该节点上无法启动新的执行器。
正在运行的作业将继续运行并完成。 挂起作业将和往常一样等待调度,可用节点更少。
注释
默认情况下,spark.yarn.executor.decommission.enabled 设置为 true,使未充分利用的节点自动关闭以优化计算效率。 如果首选不太激进的缩减,可将此配置设置为 false。
后续步骤
快速入门设置新的 Spark 池 创建 Spark 池