比较 Fabric 数据工程和 Azure Synapse Spark

Fabric 数据工程与 Azure Synapse Spark 之间的这种比较提供了关键功能的摘要,以及跨各种类别的深入分析,其中包括 Spark 池、配置、库、笔记本和 Spark 作业定义。

下表从不同的类别对 Azure Synapse Spark 和 Fabric Spark 做了比较:

类别 Azure Synapse Spark Fabric Spark
Spark 池 Spark 池
-
-
初学者池 / 自定义池
V 顺序
高并发性
Spark 配置 池级别
笔记本或 Spark 作业定义级别
环境级别
笔记本Spark 作业定义级别
Spark 库 工作区级别包
池级别包
内联包
-
环境库
内联库
资源 笔记本(Python、Scala、Spark SQL、R、.NET)
Spark 作业定义(Python、Scala、.NET)
Synapse 数据管道
管道活动(笔记本、SJD)
笔记本(Python、Scala、Spark SQL、R)
Spark 作业定义(Python、Scala、R)
数据工厂数据管道
管道活动(笔记本、SJD)
数据 主存储 (ADLS Gen2)
数据驻留(基于群集/区域)
主存储 (OneLake)
数据驻留(基于容量/区域)
元数据 内部 Hive 元存储 (HMS)
外部 HMS(使用 Azure SQL DB)
内部 HMS(湖屋
-
连接 连接器类型(链接服务)
数据源
数据源连接 到工作区标识
连接器类型 (DMTS)
数据源
-
安全性 RBAC 和访问控制
存储 ACL (ADLS Gen2)
专用链接
托管 VNet(网络隔离)
Synapse 工作区标识
数据外泄保护 (DEP)
服务标记
密钥保管库(通过 mssparkutils/链接服务)
RBAC 和访问控制
OneLake RBAC
专用链接
托管 VNet
工作区标识
-
服务标记
密钥保管库(通过 mssparkutils
DevOps Azure DevOps 集成
CI/CD(无内置支持)
Azure DevOps 集成
部署管道
开发人员体验 IDE 集成 (IntelliJ)
Synapse Studio UI
协作(工作区)
Livy API
API/SDK
mssparkutils
IDE 集成 (VS Code)
Fabric UI
协作(工作区和共享)
-
API/SDK
mssparkutils
日志记录和监视 Spark 顾问
内置监视池和作业(通过 Synapse Studio)
Spark 历史记录服务器
Prometheus/Grafana
Log Analytics
存储帐户
事件中心
Spark 顾问
内置监视池和作业(通过监视中心
Spark 历史记录服务器
-
-
-
-
业务连续性和灾难恢复 (BCDR) BCDR(数据)ADLS Gen2 BCDR(数据)OneLake

注意事项和限制:

  • DMTS 集成:不能通过笔记本和 Spark 作业定义来使用 DMTS。

  • 工作负载级别 RBAC:Fabric 支持四个不同的工作区角色。 有关详细信息,请参阅 Microsoft Fabric 工作区中的角色

  • 托管标识:目前,Fabric 不支持在笔记本中使用 Azure 密钥保管库的工作区标识或托管标识来运行笔记本和 Spark 作业定义。

  • CI/CD:可以使用 Fabric API/SDK 和部署管道

  • Livy API 以及如何提交和管理 Spark 作业:Livy API 已纳入路线图,但尚未在 Fabric 中公开。 你必须使用 Fabric UI 创建笔记本和 Spark 作业定义。

  • Spark 日志和指标:在 Azure Synapse 中,可以将 Spark 日志和指标发送到你自己的存储,例如 Log Analytics、Blob 和事件中心。 还可以通过 API 获取工作区的 Spark 应用程序列表。 目前,这两项功能在 Fabric 中均不可用。

  • 其他注意事项:

    • JDBC:Fabric 中当前不提供 JDBC 连接支持。

Spark 池比较

下表比较了 Azure Synapse Spark 和 Fabric Spark 池。

Spark 设置 Azure Synapse Spark Fabric Spark
实时池(预热实例) - 是,初学者池
自定义池
Spark 版本(运行时) 2.4、3.1、3.2、3.3、3.4 3.3、3.4、3.5
自动缩放
执行程序的动态分配 是,最多 200 个 是,基于容量
可调整节点大小 是,3-200 是,1 个,基于容量
最低节点配置 3 个节点 1 个节点
节点大小系列 内存优化、GPU 加速 内存优化
节点大小 Small-XXXLarge Small-XXLarge
自动暂停 是,可自定义,至少 5 分钟 是,不可自定义,2 分钟
高并发性
V 顺序
Spark 自动优化
本机执行引擎
并发限制 固定 基于容量的变量
多个 Spark 池 是(环境)
智能缓存
API/SDK 支持
  • 运行时:Fabric 不支持 Spark 2.4、3.1 和 3.2 版本。 Fabric Spark 在 Runtime 1.1 中支持 Spark 3.3 和 Delta 2.2,在 Runtime 1.2 中支持 Spark 3.4 和 Delta 2.4,并在 Runtime 1.3 中支持 Spark 3.5 和 Delta 3.0。

  • 自动缩放:在 Azure Synapse Spark 中,无论节点大小如何,池都可以纵向扩展到 200 个节点。 在 Fabric 中,最大节点数取决于节点大小和预配的容量。 请参阅以下 F64 SKU 示例。

    Spark 池大小 Azure Synapse Spark Fabric Spark(自定义池,SKU F64)
    最小值:3,最大值:200 最小值:1,最大值:32
    最小值:3,最大值:200 最小值:1,最大值:16
    最小值:3,最大值:200 最小值:1,最大值:8
    X-大 最小值:3,最大值:200 最小值:1,最大值:4
    XX-Large 最小值:3,最大值:200 最小值:1,最大值:2
  • 可调整节点大小:在 Azure Synapse Spark 中,最多可以设置 200 个节点。 在 Fabric 中,可以在自定义 Spark 池中使用的节点数取决于节点大小和 Fabric 容量。 容量是对 Azure 中可以使用的计算能力的衡量标准。 一种思考方式是,两个 Spark vCore(Spark 的计算能力单位)等于一个容量单位。 例如,Fabric 容量 SKU F64 有 64 个容量单位,相当于 128 个 Spark VCore。 因此,如果你选择较小的节点大小,则池中最多可以有 32 个节点 (128/4 = 32)。 然后,容量中的 vCore 总数/每个节点大小的 vCore 数 = 可用节点总数。 有关详细信息,请参阅 Spark 计算

  • 节点大小系列:Fabric Spark 池目前仅支持内存优化节点大小系列。 如果你在 Azure Synapse 中使用 GPU 加速的 SKU Spark 池,这种池在 Fabric 中不可用。

  • 节点大小:在 Azure Synapse 中,xx-large 节点大小附带 432 GB 内存,而在 Fabric 中相同的节点大小附带 512 GB,包括 64 个 vCore。 其余节点大小(从 small 到 x-large)在 Azure SynapseFabric 中具有相同的 vCore 数和内存。

  • 自动暂停:如果在 Azure Synapse Spark 中启用此设置,Apache Spark 池将在指定的空闲时长过后自动暂停。 此设置可以在 Azure Synapse 中配置(至少 5 分钟),但 Fabric 中的自定义池在会话过期后,默认会经过 2 分钟再自动暂停,此设置不可自定义。 Fabric 中的默认会话过期时间设置为 20 分钟。

  • 高并发:Fabric 支持笔记本中的高并发。 有关详细信息,请参阅 Fabric Spark 中的高并发模式

  • 并发限制:在并发方面,Azure Synapse Spark 的限制为,最多可对每个 Spark 池执行 50 个同时运行的作业,最多可对每个 Spark 池执行 200 个排队的作业。 每个 Spark 池的最大活动作业数为 250 个,每个工作区的最大活动作业数为 1000 个。 在 Microsoft Fabric Spark 中,容量 SKU 定义了并发限制。 SKU 对最大并发作业数施加不同的限制,范围为 1 到 512 个。 此外,Fabric Spark 具有基于动态预留的限制系统,用于管理并发并确保即使在高峰使用期也能顺利操作。 有关详细信息,请参阅 Microsoft Fabric Spark 中的并发限制和队列以及 Fabric 容量

  • 多个 Spark 池:如果你要使用多个 Spark 池,请使用 Fabric 中环境按笔记本或 Spark 作业定义来选择池。 有关详细信息,请参阅在 Microsoft Fabric 中创建、配置和使用环境

Spark 配置比较

可以在不同的级别应用 Spark 配置:

  • 环境级别:这些配置将用作环境中所有 Spark 作业的默认配置。
  • 内联级别:请使用笔记本和 Spark 作业定义来设置内联 Spark 配置。

虽然 Azure Synapse Spark 和 Fabric 都支持这两个选项,但需要注意几个事项:

Spark 配置 Azure Synapse Spark Fabric Spark
环境级别 是,池 是,环境
内联
导入/导出 是(来自环境的 .yml)
API/SDK 支持
  • 环境级别:在 Azure Synapse 中,可以定义多个 Spark 配置,并将其分配到不同的 Spark 池。 你可以使用环境在 Fabric 中执行此操作。

  • 内联:在 Azure Synapse 中,笔记本和 Spark 作业都支持附加不同的 Spark 配置。 在 Fabric 中,会话级别的配置是使用 spark.conf.set(<conf_name>, <conf_value>) 设置自定义的。 对于批处理作业,还可以通过 SparkConf 应用配置。

  • 导入/导出:适用于 Spark 配置的此选项在 Fabric 环境中可用。

  • 其他注意事项:

    • 不可变的 Spark 配置:某些 Spark 配置是不可变的。 如果收到消息 AnalysisException: Can't modify the value of a Spark config: <config_name>,则有关属性是不可变的。
    • FAIR 计划程序:FAIR 计划程序在高并发模式下使用。
    • V 顺序:V 顺序是应用于 Fabric Spark 池中默认启用的 parquet 文件的写入时优化。
    • 优化写入:优化写入在 Azure Synapse 中默认处于禁用状态,但在 Fabric Spark 中则默认处于启用状态。

Spark 库比较

可以在不同级别应用 Spark 库:

  • 工作区级别:无法将这些库上传/安装到工作区,并稍后分配到 Azure Synapse 中的特定 Spark 池。
  • 环境级别:可以将库上传/安装到某个环境。 环境级别的库可供环境中运行的所有 Spark 作业定义和笔记本使用。
  • 内联:除了环境级别的库外,还可以指定内联库。 例如,在笔记本会话的开头指定。

注意事项:

Spark 库 Azure Synapse Spark Fabric Spark
工作区级别
环境级别 是,池 是,环境
内联
导入/导出
API/SDK 支持
  • 其他注意事项
    • 内置库:Fabric 和 Azure Synapse 共享 Spark 的共同核心,但它们在运行时库的不同支持方面可能略有不同。 通常,using 代码是兼容的,但存在一些例外情况。 在这种情况下,用户可能需要进行编译、添加自定义库并调整语法。 请参阅此处的内置 Fabric Spark 运行时库。

笔记本比较

笔记本和 Spark 作业定义是用于在 Fabric 中开发 Apache Spark 作业的主要代码项。 Azure Synapse Spark 笔记本Fabric Spark 笔记本之间存在一些差异:

笔记本功能 Azure Synapse Spark Fabric Spark
导入/导出
会话配置 是,UI 和内联 是,UI(环境)和内联
IntelliSense
mssparkutils
笔记本资源
协作
高并发性
.NET for Spark C#
管道活动支持
内置计划运行支持
API/SDK 支持
  • mssparkutils:由于 Fabric 中尚不支持 DMTS 连接,因此对于 mssparkutils.credentials,Fabric 目前仅支持 getTokengetSecret

  • 笔记本资源:Fabric 笔记本提供了类似于 Unix 的文件系统,可帮助你管理文件夹和文件。 有关详细信息,请参阅如何使用 Microsoft Fabric 笔记本

  • 协作:Fabric 笔记本是一个协作项,支持多个用户编辑同一个笔记本。 有关详细信息,请参阅如何使用 Microsoft Fabric 笔记本

  • 高并发:在 Fabric 中,可以将笔记本附加到高并发会话。 用户可以使用此选项来代替 Azure Synapse 中的 ThreadPoolExecutor。 有关详细信息,请参阅为 Fabric 笔记本配置高并发模式

  • .NET for Spark C#:Fabric 不支持 .NET Spark (C#)。 但是,建议用户将其现有的以 C# 或 F# 编写的工作负载迁移到 Python 或 Scala

  • 内置计划运行支持:Fabric 支持按计划运行笔记本。

  • 其他注意事项:

    • 你可以在笔记本中使用只有特定 Spark 版本才支持的功能。 请记住,Fabric 不支持 Spark 2.4 和 3.1。
    • 如果你的笔记本或 Spark 作业使用具有不同数据源连接或装载点的链接服务,则应该修改 Spark 作业,以使用替代方法来处理与外部数据源和接收器的连接。 使用 Spark 代码通过可用的 Spark 库连接到数据源。

Spark 作业定义比较

有关 Spark 作业定义的重要注意事项:

Spark 作业功能 Azure Synapse Spark Fabric Spark
PySpark
Scala
.NET for Spark C#
SparkR
导入/导出 是 (UI)
管道活动支持
内置计划运行支持
重试策略
API/SDK 支持
  • Spark 作业:你可以引入 .py/.R/jar 文件。 Fabric 支持 SparkR。 Spark 作业定义支持引用文件、命令行参数、Spark 配置和 Lakehouse 引用。

  • 导入/导出:在 Azure Synapse 中,可以从 UI 导入/导出基于 json 的 Spark 作业定义。 此功能目前在 Fabric 中不可用。

  • .NET for Spark C#:Fabric 不支持 .NET Spark (C#)。 但是,建议用户将其现有的以 C# 或 F# 编写的工作负载迁移到 Python 或 Scala

  • 管道活动支持:Fabric 中的数据管道尚不包括 Spark 作业定义活动。 如果你要定期运行 Spark 作业,可以使用计划运行。

  • 内置计划运行支持:Fabric 支持按计划运行 Spark 作业定义

  • 重试策略:通过此选项,用户可以无限期地运行 Spark 结构化流式处理作业。

Hive 元存储 (HMS) 比较

Hive 元存储 (HMS) 差异和注意事项:

HMS 类型 Azure Synapse Spark Fabric Spark
内部 HMS 是(湖屋)
外部 HMS
  • 外部 HMS:Fabric 目前不支持目录 API 以及对外部 Hive 元存储 (HMS) 的访问。