Fabric 中的 Apache Spark 配置的自动优化是什么?

自动优化会自动调整 Apache Spark 配置,以减少工作负载执行时间并优化总体性能。 与需要大量的工作、资源、时间和试验的手动优化相比,自动优化可以节省时间和资源。 Autotune 使用工作负荷中的历史执行数据来迭代探索并应用针对特定工作负荷最有效的配置。

注意

Microsoft Fabric 中的自动优化查询优化功能目前为预览版。 “自动优化”在所有产品区域中都可用,但默认处于禁用状态。 通过在 Spark 笔记本或 Spark 作业定义代码中包含相应的 Spark 设置,可以在环境中或单个会话中通过 Spark 配置设置来激活该功能。

查询优化

自动优化为每个查询分别配置三个 Apache Spark 设置:

  • spark.sql.shuffle.partitions - 设置联接或聚合期间数据混排的分区计数。 默认值为 200。
  • spark.sql.autoBroadcastJoinThreshold - 设置执行联接操作时广播到所有工作器节点的表的最大大小(以字节为单位)。 默认值为 10 MB。
  • spark.sql.files.maxPartitionBytes - 定义读取文件时,要打包到单个分区的最大字节数。 适用于基于 Parquet、JSON 和 ORC 文件的源。 默认值为 128 MB。

提示

自动优化查询优化会检查各个查询,并为每个查询生成不同的 ML 模型。 它特别面向:

  • 重复查询
  • 长期运行的查询(执行时间超过 15 秒的查询)
  • Apache Spark SQL API 查询(不包括以 RDD API 编写的查询,这些查询是非常罕见的),但我们会优化所有查询,而不考虑使用的语言(Scala、PyApache Spark、R、Spark SQL)

这一功能与笔记本、Apache Spark 作业定义和管道兼容。 好处因查询的复杂性、使用的方法和结构而异。 广泛的测试表明,与探索性数据分析相关的查询实现了最大的优势,例如读取数据、运行联接、聚合和排序。

启用了自动优化的执行时间的屏幕截图。

自动优化背后的基于 AI 的直觉

自动优化功能利用了迭代过程优化查询性能。 它从默认配置开始,采用机器学习模型来评估有效性。 当用户提交查询时,系统会根据以前的交互来检索存储的模型。 它围绕名为“质心”的默认设置生成潜在的配置。 应用模型预测的最佳候选项。 执行查询后,性能数据会发回到系统,以优化模型。

反馈循环逐渐将质心转移向最佳设置。 它随着时间的推移优化性能,同时最大限度降低回归风险。 基于用户查询的持续更新可实现性能基准的优化。 此外,该过程会更新“质心”配置,以确保模型以增量方式转向更高效的设置。 这是通过评估过去的性能并将之用于指导未来调整来实现的。 它使用所有数据点来降低异常的影响。

从负责任 AI 的视角来看,自动优化功能包括透明度机制,旨在让你了解数据使用量和优势。 安全性和隐私符合微软的标准。 持续监视维护启动后的性能和系统完整性。

启用自动优化

自动优化在所有生产区域中都可用,但默认处于禁用状态。可以通过环境中的 Spark 配置设置激活该功能。要启用自动优化,请创建新环境,或者为现有环境设置 Spark 属性“spark.ms.autotune.enabled = true”,如以下屏幕截图所示。然后,在该环境中运行的所有笔记本和作业都会继承此设置,自动进行优化。

启用自动优化的屏幕截图。

自动优化包含用于监视性能和检测性能回归的内置机制。 例如,如果查询处理了异常大量的数据,则自动优化将自动停用。 它通常需要 20 至 25 次迭代才能了解并确定最佳配置。

注意

自动优化与 Fabric Runtime 1.1Runtime 1.2 兼容。 当启用高并发模式或启用专用终结点时,自动优化不起作用。 但是,无论自动缩放的配置如何,自动优化都可与自动缩放无缝集成。

通过在 Spark 笔记本或 Spark 作业定义代码中包含相应的 Apache Spark 设置,可以在单个会话中启用自动优化。

%%sql
SET spark.ms.autotune.enabled=TRUE

可以通过 Spark 设置控制相应 Spark 笔记本或者 Spark 作业定义代码的自动优化。 若要禁用自动优化,请将以下命令作为第一个单元格(笔记本)或代码行 (SJD) 执行。

%%sql 
SET spark.ms.autotune.enabled=FALSE 

案例研究

执行 Apache Spark 查询时,自动优化会创建一个专用于优化查询执行的自定义 ML 模型。 它分析查询模式和资源需求。 请考虑根据特定属性(例如国家/地区)筛选数据集的初始查询。 虽然此示例使用地理筛选,但原则普遍适用于查询中的任何属性或操作:

%%pyspark
df.filter(df.country == "country-A")

自动优化从此查询中学习,优化后续执行。 例如,当查询更改筛选器值或应用其他数据转换时,查询的结构本质通常保持一致:

%%pyspark
df.filter(df.country == "country-B")

尽管进行了更改,但自动优化可辨识新查询的基本结构,从而实施以前习得的优化。 此功能可确保持续高效,而无需为每个新的查询迭代手动重新配置。

日志

对于每个查询,自动优化确定三个 Spark 配置的最佳设置。 可以通过导航到日志来查看建议的设置。 自动优化建议的配置位于驱动程序日志中,特别是以 [自动优化] 开头的那些条目。

监视中心内自动优化日志的屏幕截图。

可以在日志中找到各种类型的条目。 以下项包含关键的条目:

状态 说明
AUTOTUNE_DISABLED 跳过。 自动优化已禁用;阻止遥测数据检索和查询优化。 启用自动优化以在尊重客户隐私的同时充分利用其功能。"
QUERY_TUNING_DISABLED 跳过。 自动优化查询优化已禁用。 启用它以为 Spark SQL 查询微调设置。
QUERY_PATTERN_NOT_MATCH 跳过。 查询模式不匹配。 自动优化对于只读查询有效。
QUERY_DURATION_TOO_SHORT 跳过。 查询持续时间太短,无法优化。 自动优化需要持续时间更长的查询来实现有效优化。 查询应至少运行 15 秒。
QUERY_TUNING_SUCCEED 成功。 查询优化已完成。 应用了最佳 Spark 设置。

透明度说明

为了达到负责任 AI 标准,本部分旨在阐明自动优化功能的使用和验证,提升透明度并促成明智的决策。

自动优化的用途

自动优化是为增强 Apache Spark 工作负载效率而开发的,主要供数据专业人员使用。 其关键功能包括:

  • 自动执行 Apache Spark 配置优化以缩短执行时间。
  • 最大限度减少手动优化工作。
  • 利用历史工作负荷数据以迭代方式优化配置。

自动优化验证

自动优化进行了广泛的测试,以确保其有效性和安全性:

  • 使用各种 Spark 工作负载进行严格的测试,以验证优化算法的有效性。
  • 针对标准 Spark 优化方法确定基准,以展现性能优势。
  • 实际案例研究凸显了自动优化的实际价值。
  • 遵循严格的安全和隐私标准来保护用户数据。

用户数据专用于提升工作负荷的性能,提供可靠的保护,以防止滥用或泄露敏感信息。