阶段 3:Hive 元存储和数据迁移

本文是 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 导出元数据

  1. 将 HMS 导出笔记本导出到Azure Synapse工作区。 此笔记本查询和将数据库、表和分区的 HMS 元数据导出到 OneLake 中的中间目录。

  2. 配置参数。 设置 Synapse 工作区名称、要导出的数据库名称,以及要暂存的目标 OneLake lakehouse。 Spark 内部目录 API 用于读取目录对象。

  3. 运行导出。 执行所有笔记本单元格。 元数据将被写入您的 Fabric Lakehouse 中“文件”部分的结构化文件夹层次结构中。

阶段 2:将元数据导入 Fabric Lakehouse

  1. 创建用于数据访问的快捷方式。 在 Lakehouse 的“文件”部分中创建指向 Synapse Spark 仓库目录的快捷方式。 这使得托管表数据可供Fabric访问。

  2. 配置仓库映射。 对于托管表,请提供 WarehouseMappings,将旧的 Synapse 仓库目录路径替换为Fabric中的快捷路径。 导入期间,所有托管表都转换为外部表。

  3. 在 Fabric 中运行导入笔记本,以使用 Spark 的内部目录 API 在 Lakehouse 中创建目录对象(数据库、表、分区)。

  4. 验证。 检查 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中自动发现。