本文說明 Azure Data Lake Storage 針對已啟用階層式命名空間功能之帳戶的已知問題與相關限制。 利用這些資訊管理您的資料工作流程,避免在使用各種 API 與整合時可能出現的陷阱。
注意
本文所述的某些功能在已啟用網路檔案系統 (NFS) 3.0 支援的帳戶中,可能不受支援。 若要在啟用各種功能時,檢視顯示功能支援影響的資料表,請參閱 Azure 儲存體帳戶中的 Blob 儲存體功能支援。
功能、服務與平台支援
大多數 Blob 儲存功能、Azure 服務整合及開源平台皆支援於具有階層命名空間的帳號中。 完整清單請參見:
- Blob 儲存體 功能可在 Azure Data Lake Storage 使用。
- 支援 Azure Data Lake Storage 的 Azure 服務
- 支援 Azure Data Lake Storage 的開源平台
Blob 儲存體 API
Data Lake Storage API、NFS 3.0 和 Blob API 可以在相同的數據上運作。
本節說明同時使用 Blob API、NFS 3.0 和 Data Lake Storage API 來操作同一份資料時的問題與限制。
您無法使用 Blob API、NFS 3.0 和 Data Lake Storage API 寫入同一個檔案執行個體。 如果你用 Data Lake Storage API 或 NFS 3.0 寫入檔案,那麼該檔案的區塊在呼叫 Get Block List blob API 時是看不到的。 唯一的例外狀況是進行覆寫時。 你可以使用 API,或使用啟用零截斷選項的 NFS 3.0,來覆寫檔案或 Blob(這是一種 POSIX 風格的作業,會在寫入前先將檔案截斷為零位元組)。
你無法使用 PutBlock 或 PutBlockList 作業,覆寫透過 Data Lake Storage 作業(例如 Path - Create 作業)所建立的 Blob。 不過,你可以使用 PutBlob 操作覆蓋這些 blob,但必須遵守 PutBlob 所用 API 版本所規定的最大 blob 大小。
當使用 List Blobs 作業而不指定分隔符號時,結果會同時包含目錄和 Blob。 如果選擇使用分隔符號,請僅使用正斜線 (
/)。 這是唯一支援的分隔符號。如果你使用 Delete Blob API 來刪除目錄,只有當該目錄是空的時才會被刪除。 這個條件表示你不能用 Blob API 遞迴刪除目錄。
不支援這些 Blob REST API:
具有階層式命名空間的帳戶不支援非受控 VM 磁碟。 如果要在儲存體帳戶上啟用階層命名空間,請將非受控 VM 磁碟放入沒有啟用階層命名空間功能的儲存體帳戶。
支援在 Azure Data Lake Storage 中遞歸地設定存取控制清單(ACL)
以遞迴方式將 ACL 變更從父目錄套用到子項目的功能已正式推出。 在目前版本中,您可以使用 Azure 儲存體總管、PowerShell、Azure CLI 以及 .NET、Java、Python 和 Node.js SDK 來套用 ACL 變更。 尚未提供對 Azure 入口網站的支援。
存取控制清單 (ACL) 和匿名讀取權限
如果容器被授予 匿名讀取權限 ,則 ACL 對該容器或該容器中的檔案沒有影響。 此限制僅影響讀取請求。 寫入要求仍會遵循 ACL。 所有對 blob 資料的要求都必須經過授權。
Azure Data Lake Storage 的私人端點
如果你用私有端點來存取 Azure Data Lake Storage(一個啟用階層命名空間的儲存帳號),你需要為 blob 和 dfs 子資源都建立一個。 針對 Data Lake Storage(dfs)端點的操作可以被重新導向到 Blob 端點,而某些操作(如管理 ACL、建立目錄及刪除目錄)則需要 DFS 私有端點。 為兩個子資源建立私有端點,確保所有操作都能順利完成。 如需詳細資訊,請參閱針對 Azure 儲存體使用私人端點。
AzCopy 搭配 Azure Data Lake Storage
當你用啟用階層命名空間的帳號使用 AzCopy,只有 v10 AzCopy 支援所需的 Data Lake Storage API。 請僅使用最新版本的 AzCopy (AzCopy v10)。 較早版本,如 AzCopy v8.1,則不被支援。
Azure 儲存體總管搭配 Azure Data Lake Storage
當您使用 Azure 儲存體總管 存取已啟用階層命名空間的儲存體帳戶時,請僅使用 1.6.0 或更新版本。 早期版本不支援管理檔案與目錄所需的階層命名空間 API。
Azure 入口網站中的儲存體瀏覽器
在 Azure 入口網站中顯示的儲存體瀏覽器中,您無法透過指定路徑來存取檔案或資料夾。 您必須改為逐層瀏覽資料夾,才能找到檔案。 因此,如果 ACL 授權使用者讀取檔案,但無法讀取該檔案前所有資料夾,該使用者就無法在儲存瀏覽器中查看該檔案。
第三方應用程式
使用REST API運作的第三方應用程式,只要你用Data Lake Storage,仍然能正常運作。 呼叫 Blob API 的應用程式通常能正常運作。
Windows Azure 儲存體 Blob (WASB) 驅動程式
目前,僅設計用於 Blob API 的 WASB 驅動程式會在少數常見案例中遇到問題。 具體來說,當用戶端連線到已啟用階層式命名空間的儲存體帳戶時。 Data Lake Storage 的多協定存取並不能緩解這些問題。
不支援使用 WASB 驅動程式作為已啟用階層命名空間的儲存體帳戶用戶端。 相反地,請在你的 Hadoop 環境中使用 Azure Blob 檔案系統(ABFS)驅動程式。 如果您正嘗試從內部部署的 Hadoop 環境遷出,且使用的版本早於 Hadoop 3.x 分支,請開立 Azure 支援票證,以協助判斷適合貴組織的後續路徑。
Azure Data Lake Storage 中 Blob 的虛刪除
在擁有階層命名空間的儲存帳號中,如果你為軟刪除的檔案或目錄重新命名父目錄,Azure 入口網站可能無法正確顯示軟刪除的項目。 在這種情況下,請使用 PowerShell 或 Azure CLI 來列出並還原軟刪除的項目。
Azure Data Lake Storage 中的事件訂閱
在具有階層命名空間的儲存帳號中,若你的帳號有事件訂閱,對次要端點(地理冗餘儲存帳號中的唯讀副本)進行讀取操作時,會導致錯誤。 若要解決此問題,請移除事件訂用帳戶。 對未啟用階層式命名空間的帳戶使用 Data Lake Storage 端點(abfss://URI)不會產生事件,但 Blob 端點(wasb:// URI)會產生事件。
提示
只有在您啟用讀取權限異地備援儲存體 (RA-GRS) 或讀取權限異地區域備援儲存體 (RA-GZRS) 時,才能使用次要端點的讀取存取權。