你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure 门户将 Azure Data Lake Storage 从 Gen1 迁移到 Gen2

本文介绍如何使用 Azure 门户简化该迁移。

注意

Azure Data Lake Storage Gen1 现已停用。 请参阅此处的停用公告。 Data Lake Storage Gen1 资源不再可访问。 如果需要特殊帮助,请与我们联系

下面的视频将向你介绍相关的详细信息。

     章节


  • 00:37 - 介绍

  • 01:16 - 准备迁移

  • 07:15 - 复制迁移

  • 17:40 - 复制与完成迁移

  • 19:43 - 完成迁移

  • 33:15 - 迁移后

在开始之前,请务必阅读 Azure Data Lake Storage 迁移指南和模式中有关如何从 Gen1 迁移到 Gen2 的一般指南。

根据某些限制,你的帐户可能不符合基于门户的迁移条件。 如果 Azure 门户中没有为你的 Gen1 帐户启用“迁移数据”按钮,但你有支持计划,则可以提交支持请求。 还可以通过 Microsoft Q&A 获得社区专家的解答。

注意

为了便于阅读,本文使用术语 Gen1 来指代 Azure Data Lake Storage Gen1,并使用术语 Gen2 来指代 Azure Data Lake Storage Gen2 。

步骤 1:创建具有 Gen2 功能的存储帐户

Azure Data Lake Storage Gen2 不是专用的存储帐户或服务类型。 它是一组可以通过启用 Azure 存储帐户的“分层命名空间”功能获得的功能。 若要创建具有 Gen2 功能的帐户,请参阅创建用于 Azure Data Lake Storage Gen2 的存储帐户

创建帐户时,请确保使用以下值配置设置。

设置
存储帐户名称 所需的任何名称。 此名称不必与 Gen1 帐户的名称匹配,并且可以位于所选的任何订阅中。
位置 Data Lake Storage Gen1 帐户使用的同一区域
复制 LRS 或 ZRS
最低 TLS 版本 1.0
NFS v3 已禁用
分层命名空间 已启用

备注

Azure 门户中的迁移工具不会移动帐户设置。 因此,创建帐户后,必须手动配置设置,例如加密、网络防火墙和数据保护。

重要

请务必使用新创建的、没有任何使用记录的全新存储帐户。 请勿迁移至之前使用过的帐户,也不要使用已通过删除容器来清空帐户的帐户。

步骤 2:验证 Azure 基于角色的访问控制 (RBAC) 角色分配

对于 Gen2,请确保已向 Microsoft Entra 用户标识分配存储 Blob 数据所有者角色(在存储帐户、父资源组或订阅的范围内)。

对于 Gen1,请确保已向 Microsoft Entra 标识分配所有者角色(在 Gen1 帐户、父资源组或订阅的范围内)。

步骤 3:迁移 Azure Data Lake Analytics 工作负载

Azure Data Lake Storage Gen2 不支持 Azure Data Lake Analytics。 Azure Data Lake Analytics 将于 2024 年 2 月 29 日停用。 如果尝试使用 Azure 门户迁移用于 Azure Data Lake Analytics 的 Azure Data Lake Storage Gen1 帐户,则可能会破坏 Azure Data Lake Analytics 工作负载。 在尝试迁移 Gen1 帐户之前,必须先将 Azure Data Lake Analytics 工作负载迁移到 Azure Synapse Analytics 或其他受支持的计算平台。

有关详细信息,请参阅使用 Azure 门户管理 Azure Data Lake Analytics

步骤 4:准备 Gen1 帐户

仅包含空格或制表符、以 . 结尾、包含 : 或带有多个连续正斜杠 (//) 的文件或目录名称与 Gen2 不兼容。 迁移之前,需要重命名这些文件或目录。

为了获得更好的性能,请考虑将迁移延迟至少 10 天,从上次删除操作开始算起。 在 Gen1 帐户中,已删除文件会成为删除文件,垃圾回收器在七天内不会永久删除它们,并且需要另外几天才能处理清理工作。 清理所需的时间取决于文件数量。 在迁移过程中,会处理所有文件(包括软删除的文件)。 如果等到垃圾回收器永久移除了已删除的文件,那么可缩短等待时间。

步骤 5:执行迁移

在开始之前,请查看以下两个迁移选项,并决定是仅将数据从 Gen1 复制到 Gen2(推荐)还是执行完整迁移。

选项 1:仅复制数据(推荐)。 在此选项中,数据会从 Gen1 复制到 Gen2。 复制数据时,Gen1 帐户会变为只读帐户。 复制数据后,Gen1 和 Gen2 帐户都将可供访问。 但是,必须更新应用程序和计算工作负载才能使用新的 Gen2 终结点。

选项 2:执行完整迁移。 在此选项中,数据会从 Gen1 复制到 Gen2。 复制数据后,来自 Gen1 帐户的所有流量都将重定向到已启用 Gen2 的帐户。 重定向的请求会使用 Gen1 兼容性层将 Gen1 API 调用转换为 Gen2 等效项。 在迁移过程中,Gen1 帐户会变为只读帐户。 迁移完成后,Gen1 帐户将不可供访问。

无论选择哪个选项,在迁移并确认所有工作负载均按预期工作后,都可以删除 Gen1 帐户。

选项1:将数据从 Gen1 复制到 Gen2

  1. 登录到 Azure 门户即可开始操作。

  2. 找到 Data Lake Storage Gen1 帐户并显示帐户概述。

  3. 选择“迁移数据”按钮。

    Screenshot of the button to migrate.

  4. 选择“将数据复制到新的 Gen2 帐户”。

    Screenshot of the copy data option.

  5. 通过选择复选框,向 Microsoft 授予执行数据迁移的许可。 然后选择“应用”按钮。

    Screenshot of the checkbox to provide consent.

    进度栏将和子状态消息一起显示。 可以使用这些指示器来衡量迁移进度。 由于完成每项任务的时间各不相同,进度条不会以一致的速度前进。 例如,进度栏可能会快速提升到 50%,但需要更多时间才能完成剩余的 50%。

    Screenshot of progress bar when migrating data.

    重要

    迁移数据时,Gen1 帐户将变为只读帐户,并且启用了 Gen2 的帐户将被禁用。 迁移完成后,可对这两个帐户进行读取和写入操作。

    可以通过选择“停止迁移”按钮随时停止迁移。

    Screenshot of the stop migration option.

选项2:执行完整的迁移

  1. 登录到 Azure 门户即可开始操作。

  2. 找到 Data Lake Storage Gen1 帐户并显示帐户概述。

  3. 选择“迁移数据”按钮。

    Screenshot of the migrate button.

  4. 选择“完整迁移到新的 Gen 2 帐户”。

    Screenshot of the complete migration option.

  5. 通过选择复选框,向 Microsoft 授予执行数据迁移的许可。 然后选择“应用”按钮。

    Screenshot of the consent checkbox.

    进度栏将和子状态消息一起显示。 可以使用这些指示器来衡量迁移进度。 由于完成每项任务的时间各不相同,进度条不会以一致的速度前进。 例如,进度栏可能会快速提升到 50%,但需要更多时间才能完成剩余的 50%。

    Screenshot of progress bar when performing a complete migration.

    重要

    迁移数据时,Gen1 帐户将变为只读帐户,并且启用了 Gen2 的帐户将被禁用。

    另外,在重定向 Gen1 URI 时,两个帐户都处于禁用状态。

    迁移完成后,将禁用 Gen1 帐户。 Gen1 帐户中的数据不可访问,将在 30 天后删除。 Gen 2 帐户将可用于读取和写入。

    在对 URI 进行重定向之前,可以通过选择“停止迁移”按钮随时停止迁移。

    Screenshot of the migration stop button.

步骤 6:验证迁移是否已完成

如果迁移已成功完成,则会在已启用 Gen2 的帐户上创建名为 gen1 的容器,并将 Gen1 帐户中的所有数据复制到此新建 gen1 容器中。 为了在 Gen1 上存在的路径上查找数据,必须向同一路径添加前缀 gen1/ 才能在 Gen2 上访问该数据。 例如,在 Gen1 上名为“FolderRoot/FolderChild/FileName.csv”的路径将在 Gen2 上的“gen1/FolderRoot/FolderChild/FileName.csv”中可用。 不能在 Gen2 上重命名容器名称,因此无法在迁移后重命名 Gen2 上的该 gen1 容器。 但是,如果需要,可以将数据复制到 Gen2 中的新容器中。

如果迁移未成功完成,则将显示一条消息,指出迁移由于不兼容而停止。 如果需要下一步的帮助,请联系 Microsoft 支持部门。 如果以前使用了启用了 Gen2 的帐户,或者 Gen1 帐户中的文件和目录使用了不兼容的命名约定,则可能会出现此消息。

在联系客户支持之前,请确保使用新创建的且没有使用历史记录的存储帐户。 避免迁移到之前使用过的帐户,也不要使用已通过删除容器来清空帐户的帐户。 在 Gen1 帐户中,确保重命名任何仅包含空格或制表符、以 . 结尾、包含 : 或包含多个正斜杠(//)的文件或目录名称。

步骤 7:迁移工作负载和应用程序

  1. 工作负载中的服务配置为指向 Gen2 终结点。 有关可帮助你将 Azure Databricks、HDInsight 和其他 Azure 服务配置为使用 Gen2 的文章链接,请参阅支持 Azure Data Lake Storage Gen2 的 Azure 服务

  2. 更新应用程序以使用 Gen2 API。 请参阅以下指南:

    环境 项目
    Azure 存储资源管理器 使用 Azure 存储资源管理器管理 Azure Data Lake Storage Gen2 中的目录、文件
    .NET 使用 .NET 管理 Azure Data Lake Storage Gen2 中的目录和文件
    Java 使用 Java 管理 Azure Data Lake Storage Gen2 中的目录和文件
    Python 使用 Python 管理 Azure Data Lake Storage Gen2 中的目录和文件
    JavaScript (Node.js) 使用 Node.js 中的 JavaScript SDK 管理 Azure Data Lake Storage Gen2 中的目录和文件
    REST API Azure Data Lake Store REST API
  3. 更新脚本以使用 Data Lake Storage Gen2 PowerShell cmdletAzure CLI 命令

  4. 搜索代码文件、Databricks 笔记本、Apache Hive HQL 文件或其他任何用作工作负载一部分的文件中包含字符串 adl:// 的 URI 引用。 将这些引用替换为新存储帐户的 Gen2 格式 URI。 例如,Gen1 URI:adl://mydatalakestore.azuredatalakestore.net/mydirectory/myfile 可能会变为 abfss://myfilesystem@mydatalakestore.dfs.core.windows.net/mydirectory/myfile

Gen1 兼容性层

此层尝试在迁移过程中提供 Gen1 和 Gen2 之间的应用程序兼容性,以便应用程序继续使用 Gen1 API 与已启用 Gen2 的帐户中的数据进行交互。 此层的功能有限,如果在迁移过程中使用此方法,建议你使用测试帐户验证工作负载。 兼容性层在服务器上运行,因此无需安装任何内容。

重要

Microsoft 不建议将此功能作为迁移工作负载和应用程序的替换项。 在 2024 年 2 月 29 日停用 Gen1 时,将结束对 Gen1 兼容性层的支持。

为了在兼容性层中遇到最少的问题,请确保 Gen1 SDK 使用以下版本(或更高版本)。

语言 SDK 版本
.NET 2.3.9
Java 1.1.21
Python 0.0.51

兼容性层不支持以下功能。

  • 在某个条目前列出的 ListStatus API  选项。

  • 对 4000 个以上的文件使用 ListStatus API 且没有延续令牌。

  • 追加操作的区块编码。

  • 使用 https://management.azure.com/ 作为 Microsoft Entra 令牌受众的任何 API 调用。

  • 只有空格或制表符的文件或目录名称,以 . 结尾,包含 :,或者具有多个连续正斜杠 (//)。

常见问题

迁移需要多长时间?

数据和元数据并行迁移。 完成迁移所需的总时间等于这两个过程中最后一个完成的时间。

下表显示了每个迁移处理任务的大致速度。

注意

这些时间估计是近似的,可能会有所不同。 例如,复制大量小文件可能会降低性能。

处理任务 速度
数据复制 每小时 9 TB
数据验证 每小时 900 万个文件或文件夹
元数据复制 每小时 400 万个文件或文件夹
元数据处理 每小时 2500 万个文件或文件夹
其他元数据处理(数据复制选项)1 每小时 5000 万个文件或文件夹

1 仅当选择“将数据复制到新的 Gen2 帐户”选项时,其他元数据处理时间才适用。 如果选择“完成到新 Gen2 帐户的迁移”选项,则此处理时间不适用。

示例:处理大量数据和元数据

此示例假定 300 TB 的数据、2 亿数据和元数据项。

任务 估计时间
复制数据 300 TB/9 TB = 33.33 小时
验证数据 2 亿/900 万 = 22.22 小时
数据迁移总时间 33.33 + 22.2 = 55.55 小时
复制元数据 2 亿/400 万 = 50 小时
元数据处理 2 亿/2500 万 = 8 小时
其他元数据处理 - 仅数据复制选项 2 亿/5000 万 = 4 小时
元数据迁移总时间 50 + 8 + 4 = 62 小时
执行仅数据迁移的总时间 62 小时
执行完整迁移的总时间 62 - 4 = 58 小时
示例:处理少量数据和元数据

此示例假定 2 TB 数据、5.6 万数据和元数据项。

任务 估计时间
复制数据 (2 TB / 9 TB) * 60 分钟 = 13.3 分钟
验证数据 (56,000/900 万)* 3,600 秒 = 22.4 秒
数据迁移总时间 13.3 分钟 + 22.4 秒 = 大约 14 分钟
复制元数据 (56,000/400 万)* 3,600 秒 = 大约 51 秒
元数据处理 56,000/2500 万 = 8 秒
其他元数据处理 - 仅数据复制选项 (56,000/5000 万)* 3,600 秒 = 4 秒
元数据迁移总时间 51 + 8 + 4 = 63 秒
执行仅数据迁移的总时间 14 分钟
执行完整迁移的总时间 14 分钟 - 4 秒 = 13 分 56 秒(大约 14 分钟)

数据迁移的费用是多少?

使用基于门户的迁移工具是免费的,但是你需要为使用 Azure Data Lake Gen1 和 Gen2 服务付费。 在数据迁移期间,系统将对 Gen1 帐户的数据存储和事务计费。

如果选择了仅复制数据的选项,则在迁移后,你需要对 Azure Data Lake Gen1 和 Gen2 帐户的数据存储和事务付费。 为了避免对 Gen1 帐户计费,请在将应用程序更新为指向 Gen2 后删除 Gen1 帐户。 如果选择了执行完整迁移,则只需对已启用 Gen2 的帐户的数据存储和事务付费。

确保你的所有 Azure Data Lake Analytics 帐户都迁移到 Azure Synapse Analytics 或其他受支持的计算平台。 迁移 Azure Data Lake Analytics 帐户后,重试同意。 如果仍然看到此问题,并且你有支持计划,则可以提出支持请求。 还可以通过 Microsoft Q&A 获得社区专家的解答。

迁移完成后,可以重新使用 Gen1 帐户吗?

如果使用了上面提到的选项 1:把数据从 Gen1 复制到 Gen2,那么 Gen1 和 Gen2 帐户在迁移后都可以进行读取和写入。 但是,如果你使用了选项 2:执行完全迁移,那么就不支持返回到 Gen1 帐户。 在选项 2 中,迁移完成后,Gen1 帐户中的数据将无法访问,将在 30 天后删除。 你可以继续在 Azure 门户中查看 Gen1 帐户。做好准备后,可以删除 Gen1 帐户。

我想要在已启用 Gen2 的帐户上启用异地冗余存储 (GRS)。 我该怎么做?

迁移完成后,无论选择的是“复制数据”还是“完整迁移”选项,只要没有计划使用应用程序兼容性层,都可以继续将冗余选项更改为 GRS。 应用程序兼容性在使用 GRS 冗余的帐户上不起作用。

Gen1 没有容器,但 Gen2 具有容器 - 我应该注意什么?

将数据复制到启用了 Gen2 的帐户后,我们会自动创建名为 Gen1 的容器。 在 Gen2 中,不能重命名容器名称,因此可以根据需要将迁移后的数据复制到 Gen2 中的新容器。

在迁移性能方面应考虑哪些因素?

将数据复制到已启用 Gen2 的帐户时,可能影响性能的两个因素是文件数量和元数据量。 例如,复制许多小文件可能会影响迁移性能。

迁移后的 Gen2 帐户是否支持 WebHDFS 文件系统 API?

Gen2 将支持 Gen1 的 WebHDFS 文件系统 API,但存在一定的偏差,通过兼容性层仅支持有限的功能。 客户应计划利用特定于 Gen2 的 API 以获得更好的性能和功能。

停用日期后,我的 Gen1 帐户会发生什么情况?

帐户变得不可访问。 你将无法:

  • 管理帐户

  • 访问帐户中的数据

  • 接收 Gen1 或 Gen1 API、SDK 或客户端工具的服务更新

  • 通过电话或电子邮件在线访问 Gen1 客户支持

请参阅所需操作:在 2024 年 2 月 29 日之前切换到 Azure Data Lake Storage Gen2

后续步骤