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工作负载的变革性增强,通过直接在湖屋基础设施上执行Spark查询,实现显著的性能提升。 无缝集成,无需代码修改,避免供应商锁定。 它在 Runtime 1.3(Spark 3.5)和 Runtime 2.0(Spark 4.1)的 Apache Spark 各 API 中均支持 Parquet 和 Delta 两种格式。

    支持的运算符通过 Apache Gluten 和 Velox 从基于 JVM 的 Spark 转移到矢量化 C++ 执行路径,从而提供列式的 SIMD 加速处理,并原生支持 Parquet 和 Delta 格式。 如果不支持操作员,则执行会自动回退到基于 JVM 的 Spark。 在具有代表性的基准(Delta 上规模系数为 1000 的 TPC-DS)中,与开源 Spark 相比,引擎的性能提高了最多达六倍,在固定大小的 Fabric 群集上导致大约 83% 的计算成本节省。

    原生路径保留了 Fabric Spark 的查询优化功能,包括自适应查询执行、基于成本的重写、列修剪和谓词下推。 你可以通过配置 spark.native.enabled 切换每个应用的原生执行。 在笔记本单元执行期间,Fabric Spark 顾问会在执行回退到基于 JVM 的 Spark 时显示实时警报,帮助你诊断未应用本机卸载的时间。

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

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

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

提示

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

组件 运行时 1.3 运行时 2.0
发布阶段 GA 公共预览版
Apache Spark 版本 3.5.5 4.1
操作系统 水手 2.0 水手 3.0
Java 版本 11 21
Scala 版本 2.12.17 2.13.16
Python 版本 3.11 3.13
Delta Lake 版本 3.2 4.2

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

网络架构优化

在 Microsoft Fabric 中,Spark 引擎和 Delta Lake 实现都包含特定于平台的优化和功能。 这些功能利用了平台内的原生集成。 你可以禁用所有这些功能,以实现标准的 Spark 和 Delta Lake 功能。 Apache Spark 的 Fabric运行时环境包括:

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

在适用于 Apache Spark 和 Delta Lake 的 Fabric 运行时中,原生写入功能有两个关键用途:

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

支持多种运行时

Fabric支持多个运行时,因此你可以在它们之间切换,降低兼容性问题或中断的风险。

Note

Spark 运行时包含特定的 Python 版本作为其组件集的一部分。 例如,运行时 1.3 包含了 Python 3.11。 这个 Python 版本与你为纯 Python 笔记本选择的 Python 笔记本内核是分开的。 关于Python笔记本内核生命周期,请参见Fabric中的Python笔记本运行时和内核生命周期

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

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

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

完成此更改后,工作区内所有系统创建的项目,包括 Lakehouses、SJD 和笔记本,将从下一个 Spark 会话开始使用新选定的工作区级运行时版本。 如果你当前正在使用一个笔记本,并且其中已有一个用于某项作业或任何与 Lakehouse 相关活动的会话,则该 Spark 会话将按原样继续运行。 然而,从下一个会话或作业开始,所选运行时版本将适用。

要更改项目级别的运行时间 Environment ,可以创建一个新的环境项目或打开一个已有的 环境 项目。 在 运行时 下拉菜单中,从可用选项中选择所需的运行时版本,选择 Save,然后选择 Publish 以保存更改。 接下来,你可以将此项 Environment 用于 NotebookSpark Job Definition

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

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

系统会迁移所有Spark设置。 然而,如果系统识别出某个 Spark 设置与运行时 B 不兼容,它会显示警告信息,并不会实现该设置。

Spark 设置运行时更改。

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

库管理系统会将所有库从运行时A迁移到运行时B,包括公共和自定义运行时。 如果 Python 和 R 版本保持不变,库就能正常工作。 然而,对于JAR来说,由于依赖变化以及Scala、Java、Spark和操作系统的变化等因素,JAR有很大可能无法正常工作。

你负责更新或替换那些不支持运行时B的库。如果发生冲突,比如运行时B包含了运行时A中定义的库,库管理系统会根据你的设置尝试为运行时B创建必要的依赖关系。 但是,如果发生冲突,生成过程将失败。 在错误日志中,你可以看到哪些库会引发冲突,并对其版本或规范进行调整。

库管理运行时更改。

升级 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 表兼容,以确保平稳过渡,并避免任何潜在中断。