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.3 或 Runtime 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 用于 Notebook 或 Spark Job Definition。
运行时更改对 Spark 设置的影响
系统会迁移所有Spark设置。 然而,如果系统识别出某个 Spark 设置与运行时 B 不兼容,它会显示警告信息,并不会实现该设置。
运行时更改对库管理的影响
库管理系统会将所有库从运行时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 如何管理功能兼容性?》
你可以在 PySpark 环境、Spark SQL 和 Scala 中运行这个命令 delta.upgradeTableProtocol(minReaderVersion, minWriterVersion) 。 该命令会在Delta表上启动更新。
当你进行此升级时,会收到警告,称升级Delta协议版本是一个不可逆的过程。 这个过程意味着一旦你执行了更新,就无法撤销。
协议版本升级可能会影响现有 Delta Lake 表读取器、编写器或两者兼容性。 因此,请谨慎使用,只有在必要时才升级协议版本,比如在Delta Lake中采用新功能时。
重要
想了解更多关于哪些协议版本和功能在所有 Microsoft Fabric 体验中兼容,请参见 Delta Lake 表格式互操作性。
此外,确认所有当前和未来的生产工作负载及流程与使用新协议版本的 Delta Lake 表兼容,以确保平稳过渡,并避免任何潜在中断。