比较 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) |
Data | 主存储 (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.1。
自动缩放:在 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 Synapse 和 Fabric 中具有相同的 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 库:
- 工作区级别:无法将这些库上传/安装到工作区,并稍后分配到 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 目前仅支持getToken
和getSecret
。笔记本资源: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 结构化流式处理作业。
Hive 元存储 (HMS) 比较
Hive 元存储 (HMS) 差异和注意事项:
HMS 类型 | Azure Synapse Spark | Fabric Spark |
---|---|---|
内部 HMS | 是 | 是(湖屋) |
外部 HMS | 是 | 否 |
- 外部 HMS:Fabric 目前不支持目录 API 以及对外部 Hive 元存储 (HMS) 的访问。
相关内容
- 详细了解 Spark 池、配置、库、笔记本和 Spark 作业定义的迁移选项
- 迁移数据和管道
- 迁移 Hive 元存储元数据