Apache Spark for Microsoft Fabric 中的并发限制和队列

适用于:✅ Microsoft Fabric 中的数据工程和数据科学

Microsoft Fabric 允许通过容量分配计算单位,即一组在给定时间可用的专用资源。 容量定义资源执行活动或生成输出的能力。 不同项在特定时间消耗不同的容量。 Microsoft Fabric 通过 Fabric SKU 和试用版提供容量。 有关详细信息,请参阅什么是容量?

用户在 Azure 上创建 Microsoft Fabric 容量时,可以根据其分析工作负载大小选择容量大小。 在 Apache Spark 中,用户为每个预留的容量单位获得两个 Apache Spark VCore 作为其 SKU 的一部分。

一个容量单位 = 两个 Spark VCore

购买容量后,管理员可以在 Microsoft Fabric 中的容量中创建工作区。 与容量关联的 Spark VCore 在基于 Apache Spark 的所有项(如笔记本、Apache Spark 作业定义和在这些工作区中创建的湖屋)之间共享。

并发限制和队列

Spark for Fabric 实施基于核心的限制和排队机制,在该机制下,用户可以根据购买的 Fabric 容量 SKU 提交作业。 队列机制是基于 FIFO 的简单队列,用于检查可用的作业槽,并在容量可用后自动重试作业。

当用户提交笔记本或湖屋作业(如“加载到表”)且容量处于最大利用率时(由于使用所有 Spark VCore 的并发作业),将会收到以下错误:

HTTP Response code 430: This Spark job can't be run because you have hit a Spark compute or API rate limit. To run this Spark job, cancel an active Spark job through the Monitoring hub, or choose a larger capacity SKU or try again later.

启用队列后,由管道作业计划程序Spark 作业定义触发的笔记本作业将被添加到队列中,并在资源可用时自动重试。

注意

队列过期时间从作业提交时间设置为 24 小时 。 在此时间段后,作业 将从队列中删除 ,必须 手动重新提交

Fabric 容量还启用了突发功能,支持你使用最多为所购买数量 3 倍的 Spark VCore。 此突发通过允许更多作业并行运行来帮助提高并发性。

注意

如果 Spark 池配置了更高的核心计数,则突发因数会增加并发的 Spark VCore总数,并且可由单个作业利用。
换句话说, 池配置 确定作业可以使用的最大核心数,而不仅仅是基本 SKU 分配。

示例:

如果你的 F64 SKU 具有突发因数且 Spark VCore 为最高 384,则:

  • 最多可以配置 384 个 Spark VCore 的自定义池或初学者池。
  • 如果工作区管理员创建了此类池,则单个 Spark 作业(例如笔记本、作业定义或湖屋作业)可以使用所有 384 个 VCore。
  • 示例:包含 Medium 个节点(每个节点 8 个 VCore)的池,最多 48 个节点 = 384 个 VCore。

小窍门

若要最大程度地提高作业性能,请确认工作区池配置了足够的节点大小和计数。

Spark 容量 SKU 限制

Fabric 容量 SKU 等效的 Power BI SKU Spark VCore 具有突发因子的最大 Spark VCore 数 队列限制
F2 - 4 20 4
F4 - 8 24 4
F8 - 16 48 8
F16 - 32 96 16
F32 - 64 192 32
F64 P1 128 384 64
F128 P2 256 768 128
F256 P3 512 1536 256
F512 P4 1024 3072 512
F1024 - 2048 6144 1024
F2048 - 4096 12288 2048
试用容量 P1 128 128 暂无

重要

该表仅适用于在构造容量上运行的 Spark 作业。 启用自动缩放计费后,Spark 作业独立于 Fabric 容量运行,避免突发或平滑。 Spark VCore 总数将是自动缩放设置中设置的最大容量单位数的两倍。

示例计算

  • F64 SKU 提供 128 个 Spark VCore
  • 突发因子为 3,支持 最多 384 个 Spark VCore 进行并发执行。
  • 如果池配置了完整的 384 个 VCore,则在没有其他作业使用容量的情况下,单个作业可以使用它们的全部。
  • 示例:使用 128 个 VCore 的 3 个作业可以并发运行,也可以使用 384 个 VCore 运行 1 个作业。

注意

作业的队列过期期限为 24 小时,之后它们将被取消,用户必须重新提交它们才能执行。

Spark for Fabric 限制没有强制实施基于作业的任意限制,限制仅基于所购买的 Fabric 容量 SKU 允许的核心数。 默认情况下,作业准入是一种乐观的准入控制,其中作业是根据其最低核心要求来准许进入的。 了解详细信息: 就业录取和管理

如果为工作区选择了默认池(初学者池)选项,下表列出了最大并发作业限制。

了解详细信息: 配置初学者池

管理员可以配置其 Apache Spark 池,以利用在容量限定范围内可用的最大 Spark 虚拟核心 (VCores),包括 Fabric 提供的用于并发执行的 3倍突发因子。 例如,具有 F64 Fabric 容量的工作区管理员可将其 Spark 池(初学者池或自定义池)配置为最多使用 384 个 Spark VCore:

将启动池最大节点设置为 48(每个节点为 8 个虚拟处理器核),或

使用较大的节点(例如,每个节点 XXLarge = 64 个 VCore)配置自定义池,并具有适当的节点计数,以达到所需的容量。

使用此配置,单个 Spark 作业可以消耗整个突发容量,这对于确定性能优先级的大型数据处理来说是理想的选择。

新增功能:通过管理门户的作业级突发控制现在可以通过管理门户中的新设置来控制启用或禁用作业级突发:

导航到管理门户→“数据工程/科学”选项卡→容量设置

使用新的“禁用 Job-Level 突发模式”开关,以防止单个 Spark 任务占用所有可用的突发容量

注意

禁用作业级突增时,Spark 引擎强制要求任何单个作业都不能使用所有可用容量(包括突增的核心)。 这可确保容量仍可用于并发作业、提高吞吐量和多用户并发。

此功能在多租户或高并发环境中特别有用,在这些环境中,需要跨多个团队和管道均衡工作负荷。 管理员可以根据容量的配置选择优化此设置:若目标是实现最大作业吞吐量,则启用临时负载功能;若目标是实现更高的并发性和公平性,则禁用该功能。

启用突发的示例方案(默认值):大型批处理笔记本作业可以在 F64 容量中使用所有 384 个 Spark VCore,假设没有其他任何作业正在运行。

禁用突发:作业可能限制在基本核心数量限制(例如 F64 的 Spark VCore 限制为 128),为其他作业同时启动预留空间。

小窍门

对于具有不同作业类型(ETL、ML、Adhoc)的团队,禁用作业级弹性扩展有助于防止资源垄断并减少作业排队延迟。