Hive 中繼存放區同盟:啟用 Unity 目錄來管理 Hive 中繼存放區中註冊的數據表
本文介紹Hive中繼存放區同盟,此功能可讓 Unity 目錄控管儲存在 Hive 中繼存放區中的數據表。 您可以將外部的 Hive 中繼存放區或舊版的內部 Azure Databricks Hive 中繼存放區進行聯邦化。
Hive 中繼存放區同盟可用於下列使用案例:
Unity Catalog 的移轉路徑中,可以在不需修改程式碼的情況下進行逐步移轉,部分工作負載將繼續使用在 Hive 中繼存放區中註冊的數據,而其他工作負載則會進行移轉。
此使用案例最適合現今使用舊版內部 Azure Databricks Hive 中繼存放區的組織,因為同盟內部 Hive 中繼存放區同時允許讀取和寫入工作負載。
提供一個長期混合模式,讓必須同時在 Hive 中繼資料庫及 Unity Catalog 中註冊數據的組織,能夠妥善維護他們的數據。
此使用案例最適合使用外部 Hive 中繼存放區的組織,因為這些 Hive 中繼存放區的同盟目錄是唯讀的。
Hive 中繼存放區同盟概觀
在Hive中繼存放區同盟中,您會建立從 Azure Databricks 工作區到 Hive 中繼存放區的連線,而 Unity 目錄會編目 Hive 中繼存放區,以填入 同盟目錄,讓您的組織能夠與 Unity 目錄中的 Hive 中繼存放區數據表搭配使用,並提供集中式訪問控制、譜系、搜尋等等。
Azure Databricks 工作區外部的聯邦 Hive 中繼資料庫允許使用 Unity Catalog 進行讀取。 內部 Hive 中繼存放區允許讀取和寫入、更新 Hive 中繼存放區元數據,以及寫入時的 Unity 目錄元數據。
當您查詢同盟 Hive 中繼存放區資產時,Unity 目錄會提供治理層,執行訪問控制檢查和稽核等功能,而查詢則是使用 Hive 中繼存放區語意來執行。 例如,如果使用者查詢在同盟目錄中以 Parquet 格式儲存的數據表,則:
- Unity 目錄會檢查使用者是否可以存取數據表,並推斷查詢的譜系。
- 查詢本身會在底層 Hive 中介儲存庫上執行,並利用儲存在那裡的最新元資料與分割資訊。
Hive Metastore 聯盟與使用 Unity Catalog 外部資料表有何比較?
Unity 目錄能夠建立 外部數據表,並擷取已存在於任意雲端儲存位置中的數據,並將它登錄在 Unity 目錄做為數據表。 本節探討外部和同盟 Hive 中繼存放區數據表之間的差異。
這兩種資料表類型都有下列屬性:
- 可用來將雲端記憶體中的任意位置註冊為數據表。
- 可以套用 Unity 目錄許可權和細部存取控制。
- 可以在譜系中檢視參考這些查詢的內容。
只有同盟數據表具有下列屬性:
- 基於爬蟲 Hive 中繼存放區,自動發現。 一旦數據表在Hive中繼存放區中建立,它們就會浮出水面並可供在 Unity 目錄同盟目錄中查詢。
- 允許使用Hive語意來定義資料表,例如Hive SerDes和分割區。
- 允許數據表具有與同盟目錄中其他數據表重疊的路徑。
- 允許數據表位於 DBFS 根 位置。
- 包含在 Hive Metastore 中定義的視圖。
如此一來,您就可以將聯邦 Hive 中繼資料庫數據表視為提供與 Hive 中繼資料庫的回溯相容性,使得工作負載可以使用僅適用於 Hive 的語意,同時享有 Unity Catalog 所提供的控管功能。
不過,某些 Unity 目錄功能無法在同盟數據表上使用,例如:
- 僅適用於 Unity 目錄受控數據表的功能,例如預測性優化。
- 向量搜尋、差異共用、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 中繼存放區遷移至 Unity 目錄過程中順利轉換的重要關鍵。 請參閱 如何在遷移至 Unity Catalog 期間使用 Hive 中繼資料庫聯邦?。
如何設定Hive元數據存儲聯邦?
若要設定Hive中繼存放區同盟,請執行下列動作:
在 Unity 目錄中建立 連線,指定存取 Hive 中繼存放區的路徑和認證。
Hive 中繼存放區聯盟會使用此連線來爬取 Hive 中繼存放區。 針對大部分的資料庫系統,您會提供使用者名稱和密碼。 若要連線到舊版內部 Azure Databricks 工作區 Hive 中繼存放區,Hive 中繼存放區同盟會負責授權。
在 Unity Catalog 中建立 儲存憑證 和 外部儲存位置,用於取得 Hive metastore 中註冊的資料表路徑。
外部位置包含路徑及存取這些路徑所需的 儲存體認證。 儲存認證是 Unity Catalog 的安全物件,指定認證,例如 Azure 受控識別,以存取雲端儲存。 根據您選擇要建立外部位置的工作流程,您可能必須先建立記憶體認證,才能建立外部位置。
使用您在步驟 1 中建立的連線,在 Unity 目錄中建立 同盟目錄。
這是工作區使用者和工作流程透過 Unity Catalog 處理 Hive Metastore 表的目錄。 建立同盟目錄之後,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 目錄中繼存放區,表示您可以在移轉期間維護「鏡像」中繼存放區,並提供下列優點:
- 針對聯邦目錄執行的工作負載會在“Hive”中繼存放區相容性模式中運行,降低遷移期間程式碼調整的成本。
- 每個工作負載都可以選擇獨立於其他工作負載進行移轉,在移轉期間即可充分利用 Hive 中繼存放區和 Unity Catalog 中的數據,這樣可以減少協調相互依賴的工作負載之間的需求。
本節說明將 Azure Databricks 工作區的內部舊版 Hive 中繼存放區移轉至 Unity 目錄的一般工作流程,Hive 中繼存放區同盟會緩和轉換。 它不適用於移轉外部 Hive 的中繼資料存放區。 外部 Hive 中繼存放區的聯合目錄不支援寫入操作。
步驟 1:同盟內部 Hive 中繼存放區
在此步驟中,您會建立同盟目錄,以鏡像 Unity 目錄中的 Hive 中繼存放區。 讓我們稱它為 hms_in_uc
。
注意
在聯邦化過程中,您會設定外部位置來提供雲端儲存資料的存取權。 在某些工作負載使用舊版存取機制查詢數據,而其他工作負載在 Unity 目錄中查詢相同的數據時,外部位置上的 Unity 目錄管理存取控制可防止舊版工作負載從已啟用 Unity 目錄的計算存取記憶體路徑。 您可以在這些外部位置上啟用「後援模式」,以回復針對舊版工作負載所定義的任何叢集或筆記本範圍認證。 然後,移轉完成後,關閉後援模式。 請參閱 什麼是後援模式?。
如需詳細資訊,請參閱 為舊版工作區 Hive 中繼存放區啟用Hive中繼存放區同盟。
步驟 2. 針對 Unity Catalog 中的聯邦目錄執行新的工作負載
當您已就地建立同盟目錄時,您可以授與 SQL 分析師和數據科學使用者的存取權,並開始開發指向該目錄的新工作流程。 新的工作負載受益於 Unity Catalog 中的額外功能套件,包括訪問權限控制、搜索和資料譜系。
在此步驟中,您通常會執行下列動作:
- 選擇 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 REPAIR PRIVILEGES 與 Hive 中繼存放區權限與可保護物件 (舊版)。防止使用者使用計算原則建立和使用略過數據表訪問控制的叢集(不使用隔離共用存取模式的叢集或舊版自定義叢集類型)。
請參閱 管理計算組態。
將同盟目錄設為工作區預設目錄。
請參閱 管理預設目錄。
常見問題
下列各節提供有關Hive中繼存放區同盟的詳細資訊。
什麼是後援模式?
回退模式 是外部位置的一種設定,您可以在移轉至 Unity Catalog 的過程中使用它來繞過 Unity Catalog 的許可權檢查。 設定可確保尚未移轉的工作負載在安裝階段不會受到影響。
Unity Catalog 使用外部位置存取雲端儲存空間,這些外部位置是定義路徑和認證以存取您雲端儲存空間帳戶的可保護物件。 您可以發出許可權,例如 READ FILES
,以控管誰可以使用路徑。 移轉過程中的一個挑戰是,您可能不希望 Unity Catalog 立即開始管理該路徑的所有存取,例如,當您有參考該路徑的現有未遷移的工作負載時。
備援模式可讓您延遲對外部位置嚴格執行 Unity Catalog 訪問控制。 啟用後援模式時,會先針對 Unity 目錄許可權檢查存取路徑的工作負載,如果失敗,則會回到使用叢集或筆記本範圍的認證,例如實例設定檔或 Apache Spark 組態屬性。 這可讓現有的工作負載繼續使用其目前的認證。
後援模式僅供移轉期間使用。 當所有工作負載都已移轉,且您已準備好強制執行 Unity 目錄存取控制時,您應該將其關閉。
查詢備援使用情況的稽核記錄
使用下列查詢來檢查過去 30 天內是否有外部位置使用後援模式的任何存取。 如果您的帳戶中沒有後援模式存取,Databricks 建議關閉後援模式。
SELECT event_time, user_identity, action_name, request_params, response, identity_metadata
FROM system.access.audit
WHERE
request_params.fallback_enabled = 'true' AND
request_params.path LIKE '%some-path%' AND
event_time >= current_date() - INTERVAL 30 DAYS
LIMIT 10
什麼是授權路徑?
當您建立同盟目錄時,系統會提示您提供 授權路徑, 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 Catalog 的 Databricks Labs 專案 UCX,包含啟用 Hive Metastore 聯邦功能的工具:
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 實時數據表具體化檢視和串流數據表寫入同盟目錄,但您可以使用同盟資產作為 Delta 實時數據表具體化檢視和串流數據表的來源。 - 自動將舊版數據表 ACL 移轉至聯邦目錄的 Unity 目錄許可權。 UCX 可協助您解決此問題。 |