共用方式為


適用於 DBFS 和 Unity 目錄的最佳做法

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

Databricks 建議在已啟用 Unity 目錄的 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 在授與此許可權時建議小心。

請勿搭配 Unity 目錄外部位置使用 DBFS

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

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

Unity 目錄使用受控儲存位置來儲存受控數據表和磁碟區的數據檔。

Databricks 針對受控記憶體位置建議下列專案:

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

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

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

您絕對不應該載入作為 Unity 目錄中外部位置之 DBFS 根目錄使用的記憶體帳戶。

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

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

多個路徑存取的限制

雖然您通常可以使用 Unity 目錄和 DBFS,但相同命令或筆記本數據格中無法使用不同存取方法來參考相等或共用父子關聯性的路徑。

例如,如果在位置a/b/c定義hive_metastore外部數據表foo,且外部位置定義於 上的 a/b/Unity 目錄,則下列程式代碼會擲回錯誤:

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")