共用方式為


DBFS 和 Unity Catalog 的最佳實踐

Unity 目錄引進了一些新組態和概念,以與 DBFS 完全不同的方式處理數據控管。 本文概述使用 Unity Catalog 外部位置和 DBFS 的幾項最佳做法。

Databricks 建議不要在已啟用 Unity Catalog 的 Azure Databricks 工作區中,針對大部分使用案例使用 DBFS 和掛接的雲端物件儲存。 本文說明您應該使用掛接的雲端物件記憶體的一些案例。 請注意,除非您必須將儲存在該處的檔案或數據遷移至 Unity 目錄,否則 Databricks 不建議搭配 Unity 目錄使用 DBFS 根目錄。

問:在啟用了 Unity 目錄的工作區中,如何使用 DBFS?

針對 hive_metastore 數據表執行的動作會使用舊版數據存取模式,這可能包括 DBFS 所管理的數據和記憶體認證。 工作區範圍 hive_metastore 中的受控數據表會儲存在 DBFS 根目錄中。

DBFS 如何以單一使用者存取模式運作?

以單一使用者存取模式設定的叢集具有 DBFS 的完整存取權,包括 DBFS 根目錄中的所有檔案和掛接的數據。

DBFS 如何以共用存取模式運作?

共用存取模式結合了 Unity 目錄數據控管與 Azure Databricks 舊版數據表 ACL。 hive_metastore 中的數據存取權僅適用於明確授與許可權的使用者。

若要使用 DBFS 直接與檔案互動,您必須授與 ANY FILE 許可權。 由於 ANY FILE 允許使用者略過 hive_metastore 中的舊版數據表 ACL,並存取 DBFS 管理的所有數據,因此 Databricks 在授與此許可權時建議小心。

請勿將 DBFS 與 Unity Catalog 外部位置一起使用

Unity Catalog 使用完整的雲端 URI 路徑來保護對外部位置資料的存取權,透過識別受控物件儲存目錄上的授權。 DBFS 掛載點使用完全不同的數據存取模型,完全略過 Unity Catalog 目錄。 Databricks 建議您不要在 DBFS 掛接和 UC 外部磁碟區之間重用雲端物件存儲卷,包括在跨工作區或帳戶共用數據時。

保護您的 Unity 目錄受控記憶體

Unity Catalog 使用受控儲存位置來儲存受控表格和磁碟區的資料檔。

Databricks 針對受管理的儲存位置推薦以下做法:

  • 使用新的儲存帳戶或儲存桶。
  • 定義 Unity 目錄的自定義身分識別原則。
  • 限制對 Unity 目錄所管理之 Azure Databricks 的所有存取。
  • 限制針對 Unity 目錄建立之身分識別存取原則的所有存取。

將現有數據新增至外部位置

您可以使用外部位置,將現有的記憶體帳戶載入 Unity 目錄。 為了獲得最大的安全性,Databricks 建議在撤銷所有其他記憶體認證和存取模式之後,只將記憶體帳戶載入外部位置。

您絕對不應該將用作 DBFS 根目錄的儲存帳戶載入為 Unity 目錄中的外部位置。

Unity 目錄檔系統存取會忽略叢集組態

Unity 目錄不會遵守文件系統設定的叢集組態。 這表示使用 Unity 目錄存取資料時,使用雲端物件記憶體設定自定義行為的 Hadoop 檔案系統設定無法運作。

多重路徑存取的限制

一般而言,您可以同時使用 Unity Catalog 和 DBFS,但在相同命令或筆記本單元格中,無法以不同的存取方法參考相等或共用父子關聯的路徑。

例如,如果在位置 foohive_metastore 中定義外部數據表 a/b/c,並且在 a/b/上的 Unity Catalog 中定義了一個外部位置,下列程式碼將拋出錯誤:

spark.read.table("foo").filter("id IS NOT NULL").write.mode("overwrite").save("a/b/c")

如果此邏輯分成兩個資料格,就不會發生此錯誤:

df = spark.read.table("foo").filter("id IS NOT NULL")
df.write.mode("overwrite").save("a/b/c")