Fabric Runtime 1.2 (GA)

Microsoft Fabric 运行时是基于 Apache Spark 的 Azure 集成平台,可实现数据工程和数据科学体验的执行和管理。 本文档介绍运行时 1.2 组件和版本。

运行时 1.2 的主要组件包括:

  • Apache Spark 3.4.1
  • 操作系统:Mariner 2.0
  • Java:11
  • 标量:2.12.17
  • Python:3.10
  • Delta Lake:2.4.0
  • R:4.2.2

提示

始终对生产工作负荷使用最新的 GA 运行时版本,该版本当前为 Runtime 1.3

屏幕截图显示在何处选择运行时版本。

Microsoft Fabric 运行时 1.2 附带默认级别包的集合,包括完整的 Anaconda 安装以及 Java/Scala、Python 和 R 的常用库。在 Microsoft Fabric 平台中使用笔记本或作业时,会自动包含这些库。 有关库的完整列表,请参阅文档。 Microsoft Fabric 定期推出适用于运行时 1.2 的维护更新,从而提供 bug 修复、性能增强和安全补丁。 保持最新状态可确保数据处理任务的最佳性能和可靠性。

Spark 版本 3.4.1 的新增功能和改进

Apache Spark 3.4.0 是 3.x 系列的第五个版本。 此版本由开源社区驱动,解决了超过 2,600 张 Jira 票证。 它引入了用于 Spark Connect 的 Python 客户端,通过异步进度跟踪和 Python 有状态处理增强了结构化流。 它通过 NumPy 输入支持扩展 Pandas API 覆盖范围,通过 ANSI 符合性和新的内置函数简化从传统数据仓库的迁移。 它还通过内存分析提高开发工作效率和可调试性。 此外,运行时 1.2 基于 Apache Spark 3.4.1,这是一个侧重于稳定性修复的维护版本。

关键重点

通过访问 Spark 3.4.0Spark 3.4.1 阅读特定 Apache Spark 版本的发行说明的完整版本。

新的自定义查询优化

Spark 中的并发写入支持

在使用 SQL INSERT INTO 查询将并行数据插入到同一表中时,遇到 404 错误并看到消息“操作失败: 指定的路径不存在”是一个常见问题。 此错误可能会导致数据丢失。 我们的新功能“文件输出提交器算法”解决了此问题,可支持客户无缝执行并行数据插入。

要访问此功能,请启用 spark.sql.enable.concurrentWrites 功能标志,它从运行时 1.2 (Spark 3.4) 开始处于启用状态。 虽然此功能在其他 Spark 3 版本中也可用,但默认情况下不会启用。 此功能不支持并行执行每个并发作业会动态覆盖同一表不同分区上的数据的 INSERT OVERWRITE 查询。 为此,Spark 提供了一项替代功能,可通过将 spark.sql.sources.partitionOverwriteMode 设置配置为“动态”来激活该功能

智能读取,可跳过失败作业中的文件

在当前 Spark 提交器系统中,当插入表作业失败但某些任务成功时,成功任务所生成的文件会与失败作业中的文件共存。 这种共存可能会给用户造成混淆,因为很难区分哪些文件属于成功和不成功的作业。 此外,当一个作业从表读取,而另一个作业同时将数据插入同一个表中时,读取作业可能会访问未提交的数据。 如果写入作业失败,则读取作业可能会处理不正确的数据。

spark.sql.auto.cleanup.enabled 标志可控制我们的新功能,从而解决此问题。 启用后,Spark 会自动跳过读取在执行 spark.read 或从表中选择查询时尚未提交的文件。 启用此功能之前写入的文件将继续照常读取。

下面是可见的更改:

  • 现在,所有文件会在其文件名中包含标识符 tid-{jobID}
  • 此时会生成新的 _committed_{jobID} 标记,而不是通常在成功完成作业后在输出位置创建的 _success 标记。 此标记会将成功的作业 ID 与特定文件名相关联。
  • 我们引入了一个新的 SQL 命令,用户可以定期运行它来管理存储和清理未提交的文件。 此命令的语法如下所示:
    • 要清理特定目录,请执行以下操作:CLEANUP ('/path/to/dir') [RETAIN number HOURS];
    • 要清理特定表,请执行:CLEANUP [db_name.]table_name [RETAIN number HOURS];。在此语法中,path/to/dir 表示需要清理的位置 URI,number 是表示保持期的双类型值。 默认保持期设置为 7 天。
  • 我们引入了一个名为 spark.sql.deleteUncommittedFilesWhileListing 的新配置选项,该选项默认设置为 false。 启用此选项会导致在读取期间自动删除未提交的文件,但这种情况可能会降低读取操作的速度。 建议在群集处于空闲状态时手动运行清理命令,而不是启用此标志。

从运行时 1.1 迁移到运行时 1.2 的迁移指南

在从由 Apache Spark 3.3 提供支持的 运行时 1.1 迁移到由 Apache Spark 3.4 提供支持的运行时 1.2 时,请查看官方迁移指南

Delta Lake 2.4 的新增功能和改进

Delta Lake 是一个开放源代码项目,可以在数据湖之上构建湖屋体系结构。 Delta Lake 提供 ACID 事务和可缩放的元数据处理,并在现有数据湖之上统一流式处理数据处理。

具体而言,Delta Lake 提供:

  • Spark 上的 ACID 事务:可序列化的隔离级别可避免读者看到不一致的数据。
  • 可缩放的元数据处理:使用 Spark 的分布式处理能力,轻松处理包含数十亿文件的 PB 级表的所有元数据。
  • 流式处理批处理统一:Delta Lake 中的表是批处理表,也是流式处理源和接收器。 流式处理数据引入、批处理历史回填、交互式查询功能都是现成的。
  • 架构强制:自动处理架构变体,以防在引入过程中插入错误的记录。
  • 按时间顺序查看:数据版本控制支持回滚、完整的历史审核线索和可重现的机器学习试验。
  • 更新插入删除:支持合并、更新和删除操作,以启用复杂用例,如更改数据捕获、变化的维度 (SCD) 操作、流式处理更新插入等。

阅读 Delta Lake 2.4 发行说明的完整版本。

Java、Scala 和 Python 库的默认级别包

有关 Java、Scala、Python 的所有默认级别包及其各自版本的列表,请参阅发行说明