Hive 中繼存放區同盟:啟用 Unity 目錄來管理 Hive 中繼存放區中註冊的數據表
本文介紹Hive中繼存放區同盟,此功能可讓 Unity 目錄控管儲存在 Hive 中繼存放區中的數據表。 您可以將外部的 Hive 中繼存放區或舊版的內部 Azure Databricks Hive 中繼存放區進行聯邦化。
Hive 中繼存放區同盟可用於下列使用案例:
在移轉到 Unity Catalog 的過程中,可以啟用漸進式遷移而不需修改程式碼,其中一些工作負載會繼續使用在您的 Hive 中繼資料庫中註冊的資料,而其他工作負載則會被移轉。
此使用案例最適合現今使用舊版內部 Azure Databricks Hive 中繼存放區的組織,因為同盟內部 Hive 中繼存放區同時允許讀取和寫入工作負載。
為需要在 Hive metastore 維護某些數據同時在 Unity Catalog 註冊其數據的組織提供長期混合模型。
此使用案例最適合使用外部 Hive 中繼存放區的組織,因為這些 Hive 中繼存放區的同盟目錄是唯讀的。
Hive 中繼存放區同盟概觀
在 Hive 中繼存放區聯邦中,您會建立從 Azure Databricks 工作空間到 Hive 中繼存放區的連線,而 Unity 目錄會爬行 Hive 中繼存放區,以填入 聯邦目錄,使您的組織能夠在 Unity 目錄中使用 Hive 中繼存放區的數據表,並提供集中式存取控制、資料流向、搜尋等等。
Azure Databricks 工作區外部的聯邦 Hive 中繼存放區允許使用 Unity Catalog 進行讀取。 內部 Hive 中繼存放區允許讀取和寫入,當您寫入時,會更新 Hive 中繼存放區元數據以及 Unity Catalog 目錄元數據。
當您查詢同盟 Hive 中繼存放區資產時,Unity 目錄會提供治理層,執行訪問控制檢查和稽核等功能,而查詢則是使用 Hive 中繼存放區語意來執行。 例如,如果使用者查詢在同盟目錄中以 Parquet 格式儲存的數據表,則:
- Unity 目錄會檢查使用者是否可以存取數據表,並推斷查詢的譜系。
- 查詢本身會運行於底層的 Hive 中繼資料庫,並利用儲存在那裡的最新元資料和分區資訊。
Hive 中繼存放區同盟與使用 Unity 目錄外部數據表有何比較?
Unity 目錄能夠建立 外部數據表,並擷取已存在於任意雲端儲存位置中的數據,並將它登錄在 Unity 目錄做為數據表。 本節探討外部和聯邦 Hive Metastore 數據表之間的差異。
這兩種資料表類型都有下列屬性:
- 可用來將雲端記憶體中的任意位置註冊為數據表。
- 可以套用 Unity 目錄許可權和細部存取控制。
- 可以在譜系中檢視參考這些查詢的內容。
只有同盟數據表具有下列屬性:
- 基於爬蟲 Hive 中繼存放區,自動發現。 一旦數據表在Hive中繼存放區中建立,它們就會浮出水面並可供在 Unity 目錄同盟目錄中查詢。
- 允許使用Hive語意來定義資料表,例如Hive SerDes和分割區。
- 允許數據表具有與同盟目錄中其他數據表重疊的路徑。
- 允許數據表位於 DBFS 根 位置。
- 包含在 Hive metastore 中定義的視圖。
如此一來,您就可以將同盟 Hive 中繼存放區數據表視為提供與 Hive 中繼存放區的回溯相容性,讓工作負載使用僅限 Hive 的語意,但搭配 Unity 目錄所提供的控管。
不過,某些 Unity 目錄功能無法在同盟數據表上使用,例如:
- 僅適用於 Unity Catalog 管理的資料表的功能,例如預測性優化。
- 向量搜尋、差異共用、Lakehouse 監視和在線數據表。
- 某些功能存放區功能,包括功能存放區建立、模型服務建立、功能規格建立、模型記錄和批次評分。
效能可能比 Unity 目錄或 Hive 中繼存放區的工作負載稍微差,因為 Hive 中繼存放區和 Unity 目錄都在同盟數據表的查詢路徑上。
如需支援功能的詳細資訊,請參閱 需求、支援的功能和限制。
在 Azure Databricks 中寫入同盟 Hive 中繼存放區目錄的意義為何?
只有聯邦內部的Hive中繼存放區支持寫入,而外部的Hive中繼存放區則不支持。
對聯邦中繼資料庫的寫入有兩種類型:
CREATE TABLE
、ALTER TABLE
和DROP TABLE
等 DDL 作業。DDL 作業會同步反映於基礎 Hive 資料儲存庫中。 例如,執行
CREATE TABLE
語句會在Hive中繼存放區和同盟目錄中建立數據表。警告
這也表示
DROP
命令會反映在 Hive 元存儲中。 例如,DROP SCHEMA mySchema CASCADE
會刪除基礎 Hive 中繼存放區架構中的所有資料表,且無法使用選項UNDROP
,因為 Hive 中繼存放區不支援UNDROP
。INSERT
、UPDATE
和DELETE
等 DML 作業。DML 作業也會同步反映在基礎 Hive 中繼存放區數據表中。 例如,執行
INSERT INTO
會將記錄新增至Hive中繼存放區中的數據表。寫入支援是確保從 Hive Metastore 向 Unity Catalog 平順移轉的重要元素。 請參閱 如何在遷移至 Unity Catalog 過程中使用 Hive Metastore 聯合功能?。
如何設定Hive中繼存放區同盟?
若要設定Hive中繼存放區同盟,請執行下列動作:
在 Unity 目錄中建立 連線,指定存取 Hive 中繼存放區的路徑和認證。
Hive 中繼存放區聯盟會使用此連線來爬取 Hive 中繼存放區。 針對大部分的資料庫系統,您會提供使用者名稱和密碼。 若要連線到舊版內部 Azure Databricks 工作區 Hive 中繼存放區,Hive 中繼存放區同盟會負責授權。
在 Unity 目錄中建立 記憶體認證 和 外部位置,以取得 Hive 中繼存放區中註冊之數據表的路徑。
外部位置包含路徑和存取這些路徑所需的 儲存認證。 儲存體認證是 Unity Catalog 可加以保護的物件,可指定認證,例如 Azure 受控身份,以存取雲端儲存。 根據您選擇要建立外部位置的工作流程,您可能必須先建立記憶體認證,才能建立外部位置。
使用您在步驟 1 中建立的連線,在 Unity 目錄中建立 同盟目錄。
這是供工作區使用者和工作流程使用的目錄,可以透過 Unity Catalog 處理 Hive 中繼資料庫中的數據表。 建立聯邦目錄之後,Unity 目錄會將在 Hive 中繼存放區中註冊的數據表填入其中。
使用 Unity Catalog 將許可權授與聯邦目錄中的資料表。
您也可以使用 Unity 目錄資料列和資料行篩選來進行更細緻的存取控制。
開始查詢數據。
使用 Unity Catalog 存取同盟資料,對外部 Hive 中繼資料庫為唯讀,對內部 Hive 中繼資料庫則可讀寫。
針對內部 Hive 中繼資料庫和外部 Hive 中繼資料庫,Unity Catalog 會在 Hive 中繼資料庫變更時不斷更新表格的元數據。 針對內部 Hive 中繼存放區,從聯合目錄提交的新資料表與資料表的更新會寫回到 Hive 中繼存放區中,以維護 Unity 目錄與 Hive 中繼存放區目錄之間的完全互操作性。
如需詳細指示,請參閱:
如何在移轉至 Unity 目錄期間使用 Hive 中繼存放區同盟?
Hive 中繼存放區同盟可讓您透過減少小組與工作負載之間的協調需求,以累加方式移轉至 Unity 目錄。 特別是,如果您要從 Azure Databricks 工作區內部的 Hive 中繼存放區進行移轉,能夠同時讀取和寫入 Hive 中繼存放區和 Unity Catalog 中繼存放區,意味著您可以在移轉期間維護「鏡像」中繼存放區,並提供下列優點:
- 針對聯邦目錄執行的工作負載會以Hive中繼存放區相容模式運行,從而降低遷移過程中程式碼調整的成本。
- 每個工作負載都可以選擇獨立於其他工作負載進行移轉,因為在移轉期間,數據在 Hive 中繼存放區和 Unity Catalog 中都會可用,減輕了需要協調那些有相依性工作負載的需求。
本節說明將 Azure Databricks 工作區內部舊版 Hive 中繼存放區移轉至 Unity Catalog 的典型工作流程,藉由 Hive 中繼存放區聯邦來緩和過渡過程。 它不適用於移轉外部 Hive 的中繼資料存放區。 外部 Hive 中繼存放區的聯合目錄不支援寫入。
步驟 1:同盟內部 Hive 中繼存放區
在此步驟中,您會建立一個聯邦目錄,以反映您的 Unity Catalog 中的 Hive 中繼存放區。 讓我們稱它為 hms_in_uc
。
注意
在聯邦化過程中,您會設定外部位置,以提供雲端儲存中數據的存取權。 在某些工作負載使用舊版存取機制查詢數據,而其他工作負載在 Unity 目錄中查詢相同的數據時,外部位置上的 Unity 目錄管理存取控制可防止舊版工作負載從已啟用 Unity 目錄的計算存取記憶體路徑。 您可以在這些外部位置上啟用「後援模式」,以回復針對舊版工作負載所定義的任何叢集或筆記本範圍認證。 然後,移轉完成後,關閉後援模式。 請參閱 什麼是後援模式?。
如需詳細資訊,請參閱 為舊版工作區 Hive 中繼存放區啟用Hive中繼存放區同盟。
步驟 2. 在 Unity Catalog 中針對聯合目錄執行新的作業負載
當您建立了聯邦目錄後,可以授予 SQL 分析師和數據科學家存取權,並開始開發指向該目錄的新工作負載。 新的工作負載受益於 Unity 目錄中的其他功能集,包括訪問控制、搜尋和譜系。
在此步驟中,您通常會執行下列動作:
- 選擇 Unity 目錄相容的計算(也就是單一使用者或共用叢集存取模式、SQL 倉儲或無伺服器計算)。 請參閱 需求、支援的功能,以及的限制。
- 將同盟目錄設為計算資源上 預設目錄,或將
USE CATALOG hms_in_uc
新增至程式代碼頂端。 由於同盟目錄中的架構和數據表名稱是Hive中繼存放區中這些架構和數據表名稱的確切鏡像,因此您的程式代碼會開始參考同盟目錄。
步驟 3。 將現有作業遷移至聯合目錄以執行
若要將現有的作業移轉以進行同盟目錄的查詢:
- 將作業叢集上的預設目錄變更為
hms_in_uc
,方法是在叢集本身上設定屬性,或在程式代碼頂端新增USE CATALOG hms_in_uc
。 - 將作業切換至單一使用者或共用存取模式計算,並升級至其中一個支援Hive中繼存放區同盟的 Databricks Runtime 版本。 請參閱 需求、支援的功能,以及的限制。
- 要求 Azure Databricks 系統管理員授與對
hms_in_uc
中數據對象,以及對於作業將存取的任何包含在 Unity Catalog 外部位置的雲端儲存路徑的正確 Unity Catalog 許可權。 請參閱 在 Unity 目錄中管理許可權。
步驟 4. 拒絕存取Hive中繼存放區
當您將所有工作負載移轉以查詢聯邦目錄之後,就不需要使用Hive中繼資料庫。 您可以使用舊版數據表訪問控制和計算許可權來封鎖從 Azure Databricks 工作區直接存取 Hive 中繼存放區。 例如,您可以:
撤銷 Hive Metastore 目錄中物件的所有許可權。
MSCK REPAIR PRIVILEGES
命令對於此用途而言很方便。 請參閱 MSCK 修復權限 和 Hive 資料中繼存取權限與可保護的物件(舊版)。防止使用者透過計算原則建立和使用略過資料表存取控制的叢集(即不使用隔離共享存取模式或舊版自訂叢集類型的叢集)。
請參閱 管理計算組態。
將同盟目錄設為工作區預設目錄。
請參閱 管理預設目錄。
常見問題
下列各節提供有關Hive中繼存放區同盟的詳細資訊。
什麼是後援模式?
Fallback 模式 是設置在外部位置的一項設定,您可以利用它在遷移至 Unity Catalog 的過程中略過 Unity Catalog 的許可權檢查。 設定可確保尚未移轉的工作負載在安裝階段不會受到影響。
Unity Catalog 會使用外部位置取得雲端儲存的存取權,這些位置是可安全管理的物件,定義了路徑和認證以存取您的雲端儲存帳戶。 您可以發出許可權,例如 READ FILES
,以控管誰可以使用路徑。 移轉過程中的一個挑戰是,您可能不希望 Unity Catalog 立即開始管理該路徑的所有存取,例如,當您有參考該路徑的現有未遷移的工作負載時。
備用模式可讓您延遲對外部位置的 Unity Catalog 嚴格執行存取控制。 啟用後援模式時,會先針對 Unity 目錄許可權檢查存取路徑的工作負載,如果失敗,則會回到使用叢集或筆記本範圍的認證,例如實例設定檔或 Apache Spark 組態屬性。 這可讓現有的工作負載繼續使用其目前的認證。
後援模式僅供移轉期間使用。 當所有工作負載都已移轉,且您已準備好強制執行 Unity 目錄存取控制時,您應該將其關閉。
什麼是授權路徑?
當您建立聯邦目錄時,系統會提示您提供 授權路徑, 用於儲存 Hive 中繼存放區資料表的雲端儲存位置。 您需要透過 Hive 中繼資料庫聯邦存取的任何資料表,都必須由這些路徑涵蓋。 Databricks 建議您的授權路徑是大量數據表中常見的子路徑。 例如,如果您有位於 abfss://container@storageaccount.dfs.core.windows.net/bucket/table1
、./bucket/table2
和 ./bucket/table3
的數據表,則應該提供 abfss://container@storageaccount.dfs.core.windows.net/bucket/
做為授權路徑。
您可以使用 UCX,協助您識別 Hive 中繼存放區中存在的路徑。
授權路徑在聯邦目錄上新增了一層額外的安全性,允許目錄擁有者為使用者透過聯邦存取的數據施加限制。 這在您的 Hive 中繼存放區允許使用者更新元數據和隨意更改表位置時非常有用,否則這些更新將會被同步進入聯合目錄。 在此案例中,使用者可能會重新定義他們已有存取權的數據表,以便指向他們否則無法存取的新位置。
是否可以使用UCX建立Hive中繼存放區同盟?
將 Azure Databricks 工作區遷移至 Unity 目錄的 Databricks Labs 專案 UCX 包含啟用 Hive 中繼存放區同盟的公用程式:
enable-hms-federation
create-federated-catalog
請參閱 GitHub中的
需求、支援的功能和限制
下表列出Hive中繼存放區同盟所支援的服務和功能。 在某些情況下,也會列出不支持的服務或功能。 在這些數據表中,「HMS」 代表 Hive 中繼存放區。
類別 | 支援 | 不支援 |
---|---|---|
中繼存放區 | - 舊版工作區 Hive 中繼資料庫(Databricks 內部使用) - 在 Apache Hive 0.13 版或 2.3 版上使用 mySQL 的外部元數據存儲區 |
- mySQL 以外的資料庫中的外部中繼存放區 - Hive 3.1 |
操作 | - 內部 Databricks HMS:讀取和寫入 - 外部 HMS:唯讀 |
|
Hive 中繼存放區數據資產 | - Hive 中繼資料庫中的受管理和外部資料表 -模式 -視圖 - Hive SerDe 資料表 |
- Hive 函式和使用者定義函數 (UDF) - 在聯合目錄中定義新的淺層複製 - JDBC 支援的數據表 - Delta Sharing 共享資料表 - 透過聯邦目錄存取Hive中繼存放區中註冊的淺層複本 |
存儲 | - Azure Data Lake Storage Gen2 - 參考 DBFS 掛載位置的資料表,包括 DBFS 根目錄 - 路徑與其他外部位置所定義的 HMS 資料表路徑重疊的資料表 |
- 路徑與原生 Unity Catalog 物件路徑重疊的 HMS 數據表 - 存取在外部 HMS 中註冊之 DBFS 根目錄或掛接位置中的數據表 - 從定義內部 HMS 以外的任何工作區存取 DBFS 根目錄或掛接位置中的數據表 工作空間儲存帳戶的 - 防火牆支援 |
計算類型 | - 共用叢集 - 單一使用者(專門指派)叢集 - 無伺服器 (全部) - SQL 倉庫(全部) |
沒有隔離叢集 |
計算版本號 | - 所有 Databricks SQL 通道 - 所有 Delta Live Tables 頻道 - Databricks Runtime 13.3 LTS - Databricks Runtime 14.3 LTS - Databricks Runtime 15.1 和更新版本 |
|
Unity 目錄功能 | - Unity Catalog 權限模型 - 列篩選和欄位遮罩 -審計 - 下游譜系 - 資料表搜尋 - 跨工作區存取權(DBFS 根目錄和掛接除外) - 資料存取僅限於定義的外部位置 |
- Delta Sharing - Lakehouse 監視 - 向量搜尋 - 在線數據表 - 某些功能存放區功能,包括功能存放區建立、模型服務建立、功能規格建立、模型記錄和批次評分 - 您無法將 Delta Live Tables 的具現化檢視和串流表寫入聯邦目錄,但您可以使用聯邦資源作為 Delta Live Tables 具現化檢視和串流表的資料來源。 - 自動將舊版資料表 ACL 轉移到聯合目錄的 Unity Catalog 許可權。 UCX 可協助您解決此問題。 |