自动优化功能可以自动调整 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、PySpark、R、Spark SQL)。这项功能兼容于笔记本、Apache Spark 作业定义和管道。 好处因查询的复杂性、使用的方法和结构而异。 广泛的测试表明,与探索性数据分析相关的查询实现了最大的优势,例如读取数据、运行联接、聚合和排序。
AI驱动的自动音高调整背后的直觉
自动优化功能通过一个迭代过程来优化查询性能。 它从默认配置开始,采用机器学习模型来评估有效性。 当用户提交查询时,系统会根据以前的交互来检索存储的模型。 它围绕名为“中心点”的默认设置生成潜在的配置。 由模型预测的最佳候选项被应用。 执行查询后,性能数据会发回到系统,以优化模型。
反馈循环会逐步将质心移动至最优设置。 它随着时间的推移优化性能,同时最大限度降低回归风险。 基于用户查询的持续更新可实现性能基准的优化。 此外,该过程会更新质心配置,以确保模型逐步转向更高效的设置。 这是通过评估过去的性能并将之用于指导未来调整来实现的。 它使用所有数据点来降低异常的影响。
从负责任的 AI 的角度来看,自动优化功能包括透明度机制,旨在让你了解数据使用情况和优势。 安全性和隐私符合微软的标准。 持续监视维护启动后的性能和系统完整性。
启用自动调音
Autotune 在所有生产区域中都可用,但 默认处于禁用状态。可以通过环境中的 Spark 配置设置激活它。若要启用自动优化,请创建新环境,或者为现有环境设置 Spark 属性“spark.ms.autotune.enabled = true”,如以下屏幕截图所示。 然后,此设置由在该环境中运行的所有笔记本和作业继承,并自动对其进行优化。
Autotune 包含用于监视性能和检测性能回归的内置机制。 例如,如果查询处理了异常大量的数据,自动调整功能会自动停用。 它通常需要 20 至 25 次迭代才能了解并确定最佳配置。
注意
autotune 与 Fabric Runtime 1.1 和 Runtime 1.2 兼容。 当启用高并发模式或专用终结点时,自动调谐不起作用。 无论配置如何,自动优化功能都能与自动缩放实现无缝集成。
在单个会话中,您可以通过在 Spark 笔记本或 Spark 作业定义代码中包含相应的 Spark 设置来启用自动调优。
%%sql
SET spark.ms.autotune.enabled=TRUE
可以通过相应的 Spark 笔记本或 Spark 作业定义代码中的 Spark 设置来控制自动调谐。 若要禁用Autotune,请在代码的第一个单元(笔记本)或第一行(SJD)执行以下命令。
%%sql
SET spark.ms.autotune.enabled=FALSE
案例研究
执行 Apache Spark 查询时,autotune 会创建一个专用于优化查询执行的自定义 ML 模型。 它分析查询模式和资源需求。 请考虑根据特定属性(例如国家/地区)筛选数据集的初始查询。 虽然此示例使用地理筛选,但原则普遍适用于查询中的任何属性或操作:
%%pyspark
df.filter(df.country == "country-A")
自动调谐从这个查询中学习,以优化后续的执行。 例如,当查询更改筛选器值或应用其他数据转换时,查询的结构本质通常保持一致:
%%pyspark
df.filter(df.country == "country-B")
尽管进行了更改,自动调谐识别了新查询的基本结构,从而实施了以前学到的优化。 此功能可确保持续高效,而无需为每个新的查询迭代手动重新配置。
日志
对于每个查询,Autotune 确定三项 Spark 配置的最佳设置。 可以通过导航到日志来查看建议的设置。 自动优化建议的配置位于驱动程序日志中,特别是以 [自动优化] 开头的那些条目。
可以在日志中找到各种类型的条目。 以下内容包括关键条目:
状态 | 说明 |
---|---|
自动调音已禁用 | 跳过。 Autotune已禁用,这阻止了遥测数据的检索和查询优化。 启用Autotune功能以在尊重客户隐私的同时充分利用其功能。 |
查询调优已禁用 | 跳过。 自动优化查询优化已禁用。 可以启用此功能来为 Spark SQL 查询微调设置。 |
查询模式不匹配 | 跳过。 查询模式不匹配。 自动优化对于只读查询有效。 |
查询时长太短 | 跳过。 查询持续时间太短,无法优化。 自动优化需要更长的查询来实现有效优化。 查询应至少运行 15 秒。 |
查询调优成功 | 成功。 查询优化已完成。 应用了最佳 Spark 设置。 |
透明度说明
为了达到负责任 AI 标准,本部分旨在阐明自动优化功能的使用和验证,提升透明度并促成明智的决策。
自动调谐的目的
自动优化是为提高 Apache Spark 工作负载效率而开发的,主要供数据专业人员使用。 其关键功能包括:
- 自动执行 Apache Spark 配置优化以缩短执行时间。
- 最大限度减少手动调节工作。
- 利用历史工作负荷数据以迭代方式优化配置。
自动调优验证
Autotune 进行了广泛的测试,以确保其有效性和安全性:
- 使用各种 Spark 工作负载进行严格的测试,以验证优化算法的有效性。
- 针对标准 Spark 优化方法确定基准,以展现性能优势。
- 实际案例研究突出了 autotune 的实际价值。
- 遵循严格的安全和隐私标准来保护用户数据。
用户数据专用于提升工作负荷的性能,提供可靠的保护,以防止滥用或泄露敏感信息。