Fabric 中的 Apache Spark 运行时

Microsoft Fabric 运行时是基于 Apache Spark 的 Azure 集成平台,可实现数据工程和数据科学体验的执行和管理。 它结合了来自内部源和开源源的关键组件,为客户提供全面的解决方案。 为简单起见,我们将 Apache Spark 支持的 Microsoft Fabric 运行时称为 Fabric 运行时。

Fabric 运行时的主要组件:

  • Apache Spark - 一个功能强大的开源分布式计算库,可实现大规模数据处理和分析任务。 Apache Spark 为数据工程和数据科学体验提供了通用且高性能的平台。

  • Delta Lake - 一个开源存储层,可将 ACID 事务和其他数据可靠性功能引入 Apache Spark。 Delta Lake 集成在 Microsoft Fabric 运行时中,增强了数据处理功能,并确保跨多个并发操作的数据一致性。

  • 本机执行引擎 - 是 Apache Spark 工作负载的转换性增强功能,通过直接在 lakehouse 基础结构上执行 Spark 查询来提供显著的性能提升。 无缝集成,无需更改代码,并避免供应商锁定,在运行时 1.3 (Spark 3.5) 中跨 Apache Spark API 支持 Parquet 和 Delta 格式。 此引擎可提升查询速度,速度比传统 OSS Spark 快四倍,如 TPC-DS 1TB 基准所示,降低了运营成本,提高了各种数据任务(包括数据引入、ETL、分析和交互式查询)的效率。 它基于 Meta 的 Velox 和 Intel 的 Apache Gluten 构建,在处理各种数据处理场景时优化资源使用。

  • 适用于 Java/Scala、Python 和 R 的默认级别包,支持不同的编程语言和环境。 这些包会自动安装和配置,使开发人员能够应用其首选编程语言来处理数据处理任务。

  • Microsoft Fabric Runtime 基于可靠的开源操作系统构建,可确保与各种硬件配置和系统要求兼容。

下面将全面比较关键组件,包括 Apache Spark 版本、支持的操作系统、Java、Scala、Python、Delta Lake 和 R,适用于 Microsoft Fabric 平台中基于 Apache Spark 的运行时。

提示

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

组件 运行时 1.2 运行时 1.3 运行时 2.0
发布阶段 EOSA GA 实验性 (预览版)
Apache Spark 版本 3.4.1 3.5.5 4.0.0
操作系统 水手 2.0 水手 2.0 水手 3.0
Java 版本 11 11 21
Scala 版本 2.12.17 2.12.17 2.13.16
Python 版本 3.10 3.11 3.12.11
Delta Lake 版本 2.4.0 3.2 4.0.0

访问 Runtime 1.2Runtime 1.3Runtime 2.0 ,了解特定运行时版本的详细信息、新功能、改进和迁移方案。

Fabric 优化

在 Microsoft Fabric 中,Spark 引擎和 Delta Lake 实现都包含特定于平台的优化和功能。 这些功能旨在使用平台内的本机集成。 请务必注意,这些功能全部可以禁用,以实现标准的 Spark 和 Delta Lake 功能。 Apache Spark 的 Fabric 运行时包括:

  • 完整的 Apache Spark 开源版本。
  • 包含近 100 个不同的内置查询性能增强。 这些增强包括分区缓存(启用文件系统分区缓存以减少元存储调用)和交叉联接到标量子查询投影等功能。
  • 内置的智能缓存。

在 Apache Spark 和 Delta Lake 的 Fabric 运行时中,本机编写器功能有两个关键用途:

  • 它们为写入工作负载提供不同的性能,从而优化写入过程。
  • 它们默认为 Delta Parquet 文件的 V 顺序优化。 为了在所有 Fabric 引擎中提供卓越的读取性能,Delta Lake V 顺序优化至关重要。 若要深入了解其操作方式和管理方式,请参阅有关 Delta Lake 表优化和 V 顺序的专题文章。

多个运行时支持

Fabric 支持多个运行时,使用户能够灵活地在它们之间无缝切换,最大限度地减少不兼容或中断的风险。

默认情况下,所有新工作区都使用最新的 GA 运行时版本,即当前 运行时 1.3 版。

若要在工作区级别更改运行时版本,请转到“工作区设置”“数据工程/科学”>“Spark 设置”>。 在“环境”选项卡中,从可用选项中选择所需的运行时版本。 单击“保存”以确认您的选择。

显示工作区设置的运行时版本的屏幕截图。

进行此更改后,从下一个 Spark 会话开始,工作区中的所有系统创建项(包括湖屋、SJD 和 Notebook)都将使用新选择的工作区级运行时版本运行。 如果你正在使用已有会话的笔记本进行作业或任何与湖屋相关的活动,则 Spark 会话会按原样继续。 但是,从下一个会话或作业开始,将应用所选的运行时版本。

此外,若要在 Environment 项级别更改运行时,请创建新的 环境 项或打开一个现有的环境项,在 “运行时” 下拉列表中,从可用选项中选择所需的运行时版本,然后选择 Save 并保存 Publish 变更。 接下来,你可以将此项 Environment 用于 NotebookSpark Job Definition

显示环境项的运行时版本选择位置的屏幕截图。

运行时更改对 Spark 设置的影响

一般而言,我们的目标是迁移所有 Spark 设置。 但是,如果我们确定 Spark 设置与运行时 B 不兼容,我们将发出警告消息,并避免实施该设置。

Spark 设置运行时更改。

运行时更改对库管理的影响

通常,我们的方法是将所有库从运行时 A 迁移到运行时 B,包括公共运行时和自定义运行时。 如果 Python 和 R 版本保持不变,则库应正常运行。 但是,对于 Jars,由于依赖项的更改以及 Scala、Java、Spark 和操作系统的更改等因素,它们可能无法正常工作。

用户负责更新或替换任何不适用于运行时 B 的库。如果存在冲突,这意味着运行时 B 包含最初在运行时 A 中定义的库,则我们的库管理系统会尝试根据用户的设置为运行时 B 创建必要的依赖项。 但是,如果发生冲突,生成过程将失败。 在错误日志中,用户可以查看导致冲突的库,并调整其版本或规范。

库管理运行时更改。

升级 Delta Lake 协议

Delta Lake 功能始终向后兼容,确保在较低的 Delta Lake 版本中创建的表可以与更高版本无缝交互。 但是,启用某些功能(例如,通过使用 delta.upgradeTableProtocol(minReaderVersion, minWriterVersion) 方法)时,可能会影响与较低版本 Delta Lake 的向前兼容性。 在这种情况下,必须修改引用升级表的工作负载,以便与保持兼容性的 Delta Lake 版本保持一致。

每个 Delta 表都与协议规范相关联,定义其支持的功能。 与表交互的应用程序(用于读取或写入)依赖于此协议规范来确定它们是否与表的功能集兼容。 如果应用程序缺少处理表协议中所列支持的功能,则无法读取或写入该表。

协议规范分为两个不同的组件:“读取”协议和“写入”协议。 有关详细信息,请访问页面“Delta Lake 如何管理功能兼容性?”

演示在使用 upgradeTableProtocol 方法时的即时警告的 GIF。

用户可以在 PySpark 环境中以及 Spark SQL 和 Scala 中执行命令 delta.upgradeTableProtocol(minReaderVersion, minWriterVersion)。 此命令允许他们启动 Delta 表的更新。

请务必注意,在执行此升级时,用户会收到一条警告,提示升级 Delta 协议版本的过程不可逆。 这意味着执行更新后,无法撤消更新。

协议版本升级可能会影响现有 Delta Lake 表读取器、编写器或两者兼容性。 因此建议谨慎行事,仅在必要时(例如在 Delta Lake 中采用新功能时)升级协议版本。

重要

若要详细了解跨所有 Microsoft Fabric 体验兼容哪些协议版本和功能,请阅读 Delta Lake 表格式互作性

显示升级 delta Lake 协议时警告的屏幕截图。

此外,用户还应验证所有当前和将来的生产工作负载和进程是否与使用新协议版本的 Delta Lake 表兼容,以确保无缝转换并防止任何潜在的中断。