使用 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
如果您的身分識別與多個訂用帳戶相關聯,請設定使用中的訂用帳戶。
$context = Get-AzSubscription -SubscriptionId <subscription-id>
Set-AzContext $context
使用訂閱識別碼取代 <subscription-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 分鐘。 包含少於 200 百萬個 Blob 的帳戶通常會在 10 分鐘內完成升級。
首先,開啟 Azure Cloud Shell,或若已在本機安裝 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>
預留位置值。
使用下列命令驗證您的儲存體帳戶。
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 File System (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 簡介