本文是 Azure Synapse Spark 到 Microsoft Fabric 迁移最佳实践系列的第 3 阶段(共 4 阶段)。
当您准备好迁移 Hive Metastore目录并在Fabric系统中规划数据访问时,请使用这篇文章。 本文重点介绍两个决策:如何迁移表元数据以及是使用 OneLake 快捷方式(零复制),还是将数据移动到可访问的存储。
在这篇文章中,你将学会如何:
- 评估托管表与外部表,以确定您的迁移策略。
- 使用笔记本工作流导出和导入 Hive 元存储元数据。
- 创建 OneLake 快捷方式,以便对现有数据源进行零复制访问。
- 在快捷方式、复制管道和大容量传输工具之间进行选择,以便进行数据移动。
小窍门
创建目标 Lakehouse,并启用模式支持。 Lakehouse 架构允许将表组织到命名集合中(例如销售、营销、hr)。 Spark 迁移助手将默认 Synapse 数据库映射到 dbo 架构,并将其他数据库映射到同一 Lakehouse 中的其他架构。 在 Fabric 门户中创建新的 Lakehouse 时,默认情况下会启用架构。
有关完整的 HMS 迁移指南,请参见 迁移 Hive Metastore 元数据。
评估托管表与外部表的优缺点
关键的第一步是区分 Synapse Hive 元存储中的托管表和外部表。
- 外部表: 如果数据位于 Delta 格式的 ADLS Gen2 中,请直接为 ADLS Gen2 路径创建 OneLake 快捷方式。 无需数据移动。
- 托管表: 数据存储在 Synapse 的内部仓库目录中。 必须创建此路径的 OneLake 快捷方式,或将数据复制到可访问的 ADLS Gen2 位置。
Synapse 托管表仓库目录路径:
abfss://<container>@<storage>.dfs.core.windows.net/synapse/workspaces/<workspace>/warehouse
迁移工作流
Microsoft为 Hive 元存储迁移提供导出/导入笔记本。 此过程有两个阶段。
有关完整的 HMS 迁移指南,请参阅 迁移 Hive Metastore 元数据。
阶段 1:从 Synapse 导出元数据
将 HMS 导出笔记本导出到Azure Synapse工作区。 此笔记本查询和将数据库、表和分区的 HMS 元数据导出到 OneLake 中的中间目录。
配置参数。 设置 Synapse 工作区名称、要导出的数据库名称,以及要暂存的目标 OneLake lakehouse。 Spark 内部目录 API 用于读取目录对象。
运行导出。 执行所有笔记本单元格。 元数据将被写入您的 Fabric Lakehouse 中“文件”部分的结构化文件夹层次结构中。
阶段 2:将元数据导入 Fabric Lakehouse
创建用于数据访问的快捷方式。 在 Lakehouse 的“文件”部分中创建指向 Synapse Spark 仓库目录的快捷方式。 这使得托管表数据可供Fabric访问。
配置仓库映射。 对于托管表,请提供
WarehouseMappings,将旧的 Synapse 仓库目录路径替换为Fabric中的快捷路径。 导入期间,所有托管表都转换为外部表。在 Fabric 中运行导入笔记本,以使用 Spark 的内部目录 API 在 Lakehouse 中创建目录对象(数据库、表、分区)。
验证。 检查 Lakehouse Explorer UI 的“表”部分中是否显示所有导入的表。
限制和注意事项
迁移脚本使用 Spark 的内部目录 API,而不是直接 HMS 数据库连接。 对于非常大的目录来说,这可能无法很好地缩放, 对于大型环境,请考虑修改导出逻辑以直接查询 HMS 数据库。
导出期间没有隔离保证。 如果 Synapse Spark 计算并发修改元存储,可能会引入不一致的数据。 在维护时段内计划迁移。
当前迁移脚本中不包含函数。
迁移后,OneLake 快捷方式提供持续的数据访问。 如果 Synapse 继续写入相同的 ADLS Gen2 路径,Fabric通过快捷方式自动查看更新的数据(数据级同步)。 但是,Synapse HMS 中的新表或架构更改不会自动传播 — 你必须重新运行迁移脚本或在 Fabric Lakehouse 中手动创建新表。
External Hive 元存储(Azure SQL DB/MySQL):某些 Synapse 工作区使用由Azure SQL 数据库或Azure Database for MySQL支持的外部 HMS 将目录元数据保存在工作区外部并与 HDInsight 或 Databricks 共享。 Fabric 不支持连接到外部 Hive 元存储,而是专门使用 Lakehouse 目录。 如果使用外部 HMS,必须将元数据迁移到 Fabric Lakehouse 目录。 为此,可以直接查询外部 HMS 数据库(通过 JDBC)导出表定义,然后使用 Spark SQL 或 HMS 导入笔记本在Fabric中重新创建它们。 请注意,Synapse 中的外部 HMS 支持在 Spark 3.4 之后已弃用。
小窍门
若要在 Synapse 和 Fabric 处于活动状态时进行同步:使用 OneLake 快捷方式进行数据级同步(自动),并计划 HMS 导出/导入笔记本的定期重新运行,或生成对帐笔记本来检测和同步新表。
数据迁移选项
你的 Synapse 工作区中链接了 ADLS Gen2 的数据,您需要在 Fabric Lakehouse 中使其可访问,而避免不必要的数据重复。 从以下方法中进行选择。
OneLake 快捷方式(推荐的零复制):在指向现有 ADLS Gen2 路径的 Fabric Lakehouse 中创建快捷方式。 表部分的增量格式数据会自动注册到 Lakehouse 目录中。 CSV/JSON/Parquet 数据将进入“文件”部分。 无需数据移动。
mssparkutils fastcp: 用于在笔记本中将数据从 ADLS Gen2 复制到 OneLake。
AzCopy:命令行实用工具,用于从 ADLS Gen2 复制到 OneLake 的大容量数据。
数据工厂复制活动:使用 Fabric 数据工厂(或现有的 ADF/Synapse 管道)将数据复制到 Lakehouse。
Azure 存储资源管理器: Visual 工具,用于将文件从 ADLS Gen2 移动到 OneLake。
小窍门
尽可能首选快捷方式而不是数据移动。 快捷方式可避免数据重复和存储成本,“表”部分中的 Delta 表可在 SQL 分析终结点和Power BI中自动发现。