使用 Azure Data Lake Storage 功能升级 Azure Blob 存储
本文可帮助你启用分层命名空间,并解锁文件和目录级安全性和更快的操作等功能。 这些功能被大数据分析工作负载广泛使用,统称为 Azure Data Lake Storage。
要详细了解这些功能并评估此升级对工作负载、应用程序、成本、服务集成、工具、功能和文档的影响,请参阅使用 Azure Data Lake Storage 功能升级 Azure Blob 存储。
重要
升级是单向的。 执行升级后,无法还原帐户。 建议在非生产环境中验证升级。
准备升级
要准备将存储帐户升级到 Data Lake Storage,请执行以下操作:
查看功能支持
存储帐户可以配置为使用已启用 Data Lake Storage 的帐户中尚不支持的功能。 如果你的帐户正在使用此类功能,则升级将通不过验证步骤。 请查看 Azure 存储帐户中的 Blob 存储功能支持一文,以了解哪些功能不受支持。 如果当前在帐户中使用了任何此类功能,请在开始升级之前将其禁用。
Data Lake Storage 帐户支持以下功能,但升级过程不支持这些功能:
- Blob 快照
- 加密范围
- 不可变存储
- 用于生命周期管理的上次访问时间跟踪
- blob 的软删除
- 容器软删除
如果存储帐户启用了此类功能,则必须在执行升级之前将其禁用。 如果要在升级完成后继续使用这些功能,请将其重新启用。
在某些情况下,在升级之前禁用某个功能后,必须留出时间执行清理操作。 一个示例是 blob 软删除功能。 必须先禁用 blob 软删除,并允许所有软删除 blob 过期,然后才能升级帐户。
重要
你无法将存储帐户升级到曾经启用了更改源功能的 Data Lake Storage。
仅禁用更改源将不允许执行升级。 而是必须创建启用了分层命名空间功能的帐户,然后将数据传输到该帐户。
从存储帐户中移除页 blob
无法升级包含页 blob 的存储帐户。 在执行升级之前,请确保从存储帐户中移除页 blob。
确保为每个 blob 路径的段命名
迁移过程会为 Blob 的每个路径段创建一个目录。 Data Lake Storage 目录必须具有名称,因此,要成功迁移,虚拟目录中的每个路径段都必须具有名称。 同样的要求适用于仅使用空格字符命名的段。 如果任何路径段是未命名的 (//
),或者是仅使用空格字符命名的 (_
),则在继续迁移之前,必须将这些 blob 复制到与这些命名要求兼容的新路径。
阻止对存储帐户的写入活动
如果应用程序在升级期间写入存储帐户,则升级可能会失败。 若要防止此类写入活动,请执行以下操作:
停止任何可能执行写入操作的应用程序或服务。
释放或中断存储帐户中容器和 Blob 的现有租约。
升级完成后,请中断创建的租约以继续允许对容器和 Blob 进行写入访问。
警告
在不正常禁用当前正在访问这些资源的应用程序或虚拟机的情况下中断活动租约可能会产生意外的结果。 在中断任何当前租约之前,请务必停止任何当前写入活动。
登录到 Azure 门户即可开始操作。
找到存储帐户并显示帐户概览。
选择“Data Lake Gen2 升级”。
此时将出现“升级到具有 Azure Data Lake Gen2 功能的存储帐户”配置页。
展开“步骤 1: 在升级之前查看帐户更改”部分,然后单击“查看并同意更改”。
在“查看帐户更改”页上,选中相应的复选框,然后单击“同意更改”。
展开“步骤 2: 升级之前验证帐户”部分,然后单击“开始验证”。
如果验证失败,则页面中会出现错误。 在某些情况下,将显示“查看错误”链接。 如果出现该链接,请选中该链接。
然后,从“error.json”文件的上下文菜单中选择“下载”。
打开下载的文件,确定帐户未通过验证步骤的原因。 下面的 JSON 指示在该帐户上启用了不兼容的功能。 在这种情况下,您将禁用该功能,然后重新启动验证过程。
{
"startTime": "2021-08-04T18:40:31.8465320Z",
"id": "45c84a6d-6746-4142-8130-5ae9cfe013a0",
"incompatibleFeatures": [
"Blob Delete Retention Enabled"
],
"blobValidationErrors": [],
"scannedBlobCount": 0,
"invalidBlobCount": 0,
"endTime": "2021-08-04T18:40:34.9371480Z"
}
成功验证你的帐户后,展开“步骤 3: 升级帐户”部分,然后单击“开始升级”。
重要
帐户升级时,将禁用写入操作。 读取操作未被禁用,但我们强烈建议你挂起读取操作,因为这些操作可能会使升级过程不稳定。
成功完成迁移后,将显示类似于以下内容的消息。
打开 Windows PowerShell 命令窗口。
确保你已有最新的 Azure PowerShell 模块。 请参阅安装 Azure PowerShell 模块。
运行 Connect-AzAccount
命令以登录 Azure 订阅,并按照屏幕上的说明操作。
Connect-AzAccount -Environment AzureChinaCloud
如果你的标识关联到多个订阅,请设置你的活动订阅。
$context = Get-AzSubscription -SubscriptionId <subscription-id>
Set-AzContext $context
将 <subscription-id>
占位符值替换为你的订阅 ID。
使用以下命令验证存储帐户。
$result = Invoke-AzStorageAccountHierarchicalNamespaceUpgrade -ResourceGroupName "<resource-group-name>" -Name "<storage-account-name>" -RequestType Validation -AsJob
此过程可能需要一段时间,具体取决于帐户的大小。 可以使用 asJob
开关在后台作业中运行该命令,以免客户端受到阻碍。 该命令将远程运行,但作业存在于本地计算机上或运行该命令的 VM 上。 结果将传输到本地计算机或 VM。
若要检查作业的状态并在列表中显示作业的所有属性,请通过管道将返回变量传输到 Format-List
cmdlet。
$result | Format-List -Property *
如果验证成功,则 State 属性将设置为 Completed 。
如果验证失败,则 State 属性将设置为 Failed,Error 属性将显示验证错误 。
以下输出指示在帐户上启用了不兼容的功能。 在这种情况下,您将禁用该功能,然后重新启动验证过程。
在某些情况下,Error 属性会提供名为 error.json 的文件的路径 。 可以打开该文件,确定帐户未通过验证步骤的原因。
下面的 JSON 指示在该帐户上启用了不兼容的功能。 在这种情况下,您将禁用该功能,然后重新启动验证过程。
{
"startTime": "2021-08-04T18:40:31.8465320Z",
"id": "45c84a6d-6746-4142-8130-5ae9cfe013a0",
"incompatibleFeatures": [
"Blob Delete Retention Enabled"
],
"blobValidationErrors": [],
"scannedBlobCount": 0,
"invalidBlobCount": 0,
"endTime": "2021-08-04T18:40:34.9371480Z"
}
成功验证帐户后,运行以下命令开始升级。
$result = Invoke-AzStorageAccountHierarchicalNamespaceUpgrade -ResourceGroupName "<resource-group-name>" -Name "<storage-account-name>" -RequestType Upgrade -AsJob -Force
与前面的验证示例一样,此示例使用 asJob
开关在后台作业中运行该命令。 Force
开关将替代确认升级的提示。 如果不使用 AsJob
开关,则无需使用 Force
开关,因为你只需响应提示即可。
重要
帐户升级时,将禁用写入操作。 读取操作未被禁用,但我们强烈建议你挂起读取操作,因为这些操作可能会使升级过程不稳定。
若要检查作业的状态,请使用前面步骤中所述的相同方法。 运行该过程时,State 属性将设置为 Running 。
迁移成功完成后,State 属性将设置为 Completed,并且 Error 属性不会显示任何错误 。
重要
粗略估计的升级时间为每 200 万个 Blob 大约 5-10 分钟。 例如,如果帐户有 1000 万个 Blob,则升级大约需要 25-50 分钟。 包含的 Blob 数少于 200 万个的帐户花费的升级时间通常少于 10 分钟。
首先,如果在本地安装了 Azure CLI,请打开命令控制台应用程序,例如 Windows PowerShell。
使用以下命令验证安装的 Azure CLI 版本是否为 2.29.0
或更高版本。
az --version
如果 Azure CLI 版本低于 2.29.0
,请安装最新版本。 有关详细信息,请参阅安装 Azure CLI。
如果你的标识关联到多个订阅,请设置你的活动订阅。
az account set --subscription <subscription-id>
将 <subscription-id>
占位符值替换为你的订阅 ID。
使用以下命令验证存储帐户。
az storage account hns-migration start --type validation -n <storage-account-name> -g <resource-group-name>
如果验证成功,则该过程将会完成且不显示任何错误。
如果验证失败,则控制台中会显示验证错误。 例如,错误 (IncompatibleValuesForAccountProperties) Values for account properties are incompatible: Versioning Enabled
指示在帐户上启用了不兼容的功能(版本控制)。 在这种情况下,您将禁用该功能,然后重新启动验证过程。
在某些情况下,控制台中会显示名为 error.json 的文件的路径。 可以打开该文件,确定帐户未通过验证步骤的原因。
下面的 JSON 指示在该帐户上启用了不兼容的功能。 在这种情况下,您将禁用该功能,然后重新启动验证过程。
{
"startTime": "2021-08-04T18:40:31.8465320Z",
"id": "45c84a6d-6746-4142-8130-5ae9cfe013a0",
"incompatibleFeatures": [
"Blob Delete Retention Enabled"
],
"blobValidationErrors": [],
"scannedBlobCount": 0,
"invalidBlobCount": 0,
"endTime": "2021-08-04T18:40:34.9371480Z"
}
成功验证帐户后,运行以下命令开始升级。
az storage account hns-migration start --type upgrade -n storage-account-name -g <resource-group-name>
重要
帐户升级时,将禁用写入操作。 读取操作未被禁用,但我们强烈建议你挂起读取操作,因为这些操作可能会使升级过程不稳定。
如果迁移成功,则该过程将会完成且不显示任何错误。
停止升级
可以在迁移完成之前停止迁移。
若要在升级完成之前停止升级,请在升级正在进行时选择“取消升级”。
若要在升级完成之前停止升级,请使用 Stop-AzStorageAccountHierarchicalNamespaceUpgrade
命令。
Stop-AzStorageAccountHierarchicalNamespaceUpgrade -ResourceGroupName <resource-group-name> -Name <storage-account-name>
若要在升级完成之前停止升级,请使用 az storage account hns-migration stop
命令。
az storage account hns-migration stop -n <storage-account-name> -g <resource-group-name>
迁移数据、工作负载和应用程序
将工作负荷中的服务配置为指向 Blob 服务终结点或 Data Lake storage 终结点。
对于使用 Windows Azure 存储 Blob 驱动程序或 WASB 驱动程序的 Hadoop 工作负荷,请确保修改它们以使用 Azure Blob 文件系统 (ABFS) 驱动程序。 不同于对 Blob 服务终结点发出请求的 WASB 驱动程序,ABFS 驱动程序将向帐户的 Data Lake Storage 终结点发出请求。
测试自定义应用程序,以确保在你的升级帐户中正常工作。
Data Lake Storage 上的多协议访问允许大多数应用程序继续使用 Blob API,而无需修改。 如果你遇到问题或者想要使用 API 处理目录操作和 ACL,请考虑移动一些代码以使用 Data Lake Storage API。 请参阅适用于 .NET、Java、Python、Node.js 和 REST 的指南。
测试任何自定义脚本,以确保在你的升级帐户中正常工作。
与 Blob API 一样,许多脚本可能不需要修改即可工作。 但是,如果需要,你可以升级脚本文件,以使用 Data Lake Storage PowerShell cmdlet 和 Azure CLI 命令。
另请参阅
Azure Data Lake Storage 简介