共用方式為


Hive 中繼存放區同盟:啟用 Unity Catalog 來管理在 Hive 中繼存放區中註冊的 tables

重要

這項功能位於公開預覽版中

本文介紹Hive中繼存放區同盟,此功能可讓 Unity Catalog 控管儲存在 Hive 中繼存放區中的 tables。 您可以將外部的 Hive 中繼存放區或舊版的內部 Azure Databricks Hive 中繼存放區進行聯邦化。

Hive 中繼存放區同盟可用於下列使用案例:

  • 在 Unity Catalog的移轉路徑中,啟用漸進式移轉而無需調整程式碼,其中一些工作負載會繼續使用在 Hive 中繼存放區中註冊的數據,而其他工作負載則會進行移轉。

    此使用案例最適合目前使用舊版內部 Azure Databricks Hive 中繼存放區的組織,因為聯邦內部 Hive metastores 允許同時進行讀取和寫入的工作負載。

  • 若要為組織提供長期混合式模型,這些組織必須在Hive中繼存放區中維護某些數據,以及其在 Unity Catalog中註冊的數據。

    此使用案例最適合使用外部 Hive 中繼資料庫的組織,因為這些 Hive metastores 的聯邦 catalogs 是唯讀的。

介紹Hive聯邦的圖表

Hive 中繼存放區同盟概觀

在Hive中繼存放區同盟中,您會從Azure Databricks工作區建立聯機到Hive中繼存放區,而Unity Catalog 會搜耙 Hive 中繼存放區,以填入 同盟 catalog,讓您的組織在 Unity Catalog中使用 Hive 中繼存放區 tables,提供集中式訪問控制、譜系、搜尋等等。

Azure Databricks 工作區外部的同盟 Hive metastores 允許使用 Unity Catalog讀取。 內部 Hive metastores 允許讀取和寫入、更新 Hive 中繼存放區元數據,以及在寫入時更新 Unity Catalog 元數據。

當您查詢同盟 Hive 中繼存放區資產時,Unity Catalog 會提供治理層、執行訪問控制檢查和稽核等功能,而查詢則是使用 Hive 中繼存放區語意來執行。 例如,如果使用者在聯邦 catalog中查詢以 Parquet 格式儲存的 table,則:

  • Unity Catalog 會檢查使用者是否可以存取 table,並推斷查詢歷程。
  • 查詢本身會在底層的 Hive 元數據存儲上執行,並利用儲存在那裡的最新元數據和 partition 資訊。

圖表,顯示Hive同盟案例中 HMS、Unity Catalog和 Databricks 工作負載之間的關聯性

Hive 中繼資料庫聯邦與使用 Unity Catalog 外部 tables相比之下有何不同?

Unity Catalog 能夠建立 外部 tables,並擷取已存在於任意雲端儲存位置中的數據,並將它註冊到 Unity Catalog 中作為 table。 本節探討外部與聯邦 Hive 中繼存放區 tables之間的差異。

這兩種 table 類型都有下列屬性:

  • 可用來將雲端記憶體中的任意位置註冊為 table。
  • 可以套用 Unity Catalog 權限和細粒度存取控制。
  • 可以在譜系中檢視參考這些查詢的內容。

只有同盟 tables 具有下列屬性:

  • 基於爬蟲 Hive 中繼存放區,自動發現。 一旦在Hive中繼存放區中建立 tables,它們就會浮出水面並可供在 Unity Catalog 同盟 catalog中查詢。
  • 允許使用 Hive 的語意來定義 tables,例如 Hive SerDes 和分區。
  • 允許 tables 與同盟 catalogs中的其他 tables 重疊路徑。
  • 允許 tables 位於 DBFS 根 位置。
  • 包含定義在 Hive Metastore 的 views。

如此一來,您可以將聯邦 Hive 中繼存放區 tables 視為提供與 Hive 中繼存放區相容的向後相容性,讓工作負載能夠使用僅限 Hive 的語義,但搭配 Unity Catalog提供的治理。

不過,某些 Unity Catalog 功能不適用於同盟 tables,例如:

  • 僅適用於 Unity Catalog managed tables的功能,例如預測性優化。
  • 向量搜尋、Delta 共用、Lakehouse 監視和 online tables。
  • 某些功能存放區功能,包括功能存放區建立、模型服務建立、功能規格建立、模型記錄和批次評分。

效能可能比 Unity Catalog 或 Hive 中繼存放區上的工作負載稍微差,因為 Hive 中繼存放區和 Unity Catalog 都在同盟 table的查詢路徑上。

如需支援功能的詳細資訊,請參閱 需求、支援的功能和限制

在 Azure Databricks 中寫入同盟 Hive 中繼存放區 catalog 的意義為何?

只有同盟內部的 Hive metastores支援寫入操作,而外部的 Hive metastores則不支援。

寫入聯邦 metastores 的操作有兩種類型:

  • CREATE TABLEALTER TABLEDROP TABLE等 DDL 作業。

    DDL 作業會同步反映於基礎 Hive 資料儲存庫中。 例如,執行 CREATE TABLE 語句會在Hive中繼存放區和同盟 catalog中建立 table。

    警告

    這也表示 DROP 命令會反映在 Hive 元存儲中。 例如,DROP SCHEMA mySchema CASCADE 會在基礎 Hive 中繼資料庫 schema中移除所有的 tables,且沒有 UNDROP的選項,因為 Hive 中繼資料庫不支援 UNDROP

  • INSERTUPDATEDELETE等 DML 作業。

    DML 作業也會同步反映在底層的 Hive 中繼存放區 table中。 例如,執行 INSERT INTO 會將記錄新增至Hive中繼存放區中的 table。

    寫入支援是啟用從 Hive Metastore 移轉至 Unity Catalog過程中順暢轉換的關鍵。 請參閱 如何在移轉至 Unity Catalog期間使用 Hive 中繼存放區同盟?

如何 set Hive 中繼存放區同盟?

若要 set Hive 中繼存放區同盟,請執行下列動作:

  1. 在 Unity Catalog 中建立 連線,指定存取 Hive 中繼存放區的路徑和 credentials。

    Hive 中繼存放區聯盟會使用此連線來爬取 Hive 中繼存放區。 針對大部分的資料庫系統,您會提供使用者名稱和密碼。 若要連線到舊版內部 Azure Databricks 工作區 Hive 中繼存放區,Hive 中繼存放區同盟會負責授權。

  2. 在 Unity Catalog 中建立 記憶體認證外部位置,以取得 Hive 中繼存放區中註冊之 tables 的路徑。

    外部位置包含存取這些路徑所需的路徑和 記憶體 credentials。 儲存體 credentials 是 Unity Catalog 可受保護的物件,可指定 credentials,例如 Azure 管理的身份識別,以存取雲端儲存體。 根據您選擇的工作流程,建立外部位置時,您可能需要先建立存儲 credentials。

  3. 使用您在步驟 1 中建立的連線,在 Unity Catalog中建立 同盟 catalog

    這是工作區使用者和工作流程透過 Unity Catalog與 Hive 中繼存放區 tables 一起使用的 catalog。 建立同盟 catalog之後,Unity Catalog 會用已在 Hive 中繼存放區註冊的 tables 進行填充。

  4. 在同盟 catalog 中使用 Unity Catalog向 tables 提供 Grant 許可權。

    您也可以使用 Unity Catalog 資料列和 column 篩選條件來進行更細微的存取控制。

  5. 開始查詢數據。

    使用 Unity Catalog 存取同盟數據時,對於外部 Hive metastores 來說是唯讀,而對於內部 Hive metastores則是可讀寫。

    針對內部 Hive metastores 和外部 Hive metastores,Unity Catalog 會在 Hive 元數據儲存庫變更時持續更新 table 元數據。 針對內部 Hive metastores,從聯合的 catalog 認可的新的 tables 和 table 更新會寫回 Hive 中繼存放區,維護 Unity Catalog 與 Hive 中繼存放區 catalogs之間的完整互操作性。

如需詳細指示,請參閱:

如何在移轉至 Unity Catalog期間使用 Hive 中繼存放區同盟?

Hive 中繼存放區聯邦可讓您藉由減少小組與工作負載之間的協調需求,逐步移轉至 Unity Catalog。 特別是,如果您要從 Azure Databricks 工作區的內部 Hive 中繼存放區移轉,則能夠讀取和寫入 Hive 中繼存放區和 Unity Catalog 中繼存放區,這表示您可以在移轉期間保持「鏡像」metastores,並提供下列優點:

  • 運行在聯邦 catalogs 上的工作負載將在 Hive 中繼存放區相容模式下執行,這降低了遷移期間程式碼調整的成本。
  • 每個工作負載可以選擇獨立於其他工作負載進行移轉,並且確保在移轉期間,Hive 中繼存放區和 Unity Catalog的資料皆可使用,減少必須協調相依工作負載的需求。

圖表,提供遷移場合中的 HMS 聯邦概覽

本節說明將 Azure Databricks 工作區的內部舊版 Hive 中繼存放區移轉至 Unity Catalog的一般工作流程,Hive 中繼存放區同盟會緩和轉換。 它不適用於移轉外部 Hive 的中繼資料存放區。 外部 Hive metastores 的聯邦設置 catalogs 不支援寫入操作。

步驟 1:同盟內部 Hive 中繼存放區

在此步驟中,您會建立聯邦 catalog,以同步 Unity Catalog中的 Hive 中繼存放區。 讓我們稱它為 hms_in_uc

顯示在 Hive 中繼資料存放區上執行的工作負載,以及鏡像 Unity Catalog 聯邦 catalog、hms_in_uc

注意

在同盟程式中,您會 set 外部位置,以提供雲端記憶體中數據的存取權。 在某些工作負載使用舊版存取機制查詢數據的移轉情境中,其他工作負載在 Unity Catalog中查詢相同數據,而 Unity Catalog管理的外部位置存取控制可以防止舊版工作負載從 Unity Catalog啟用計算的環境中存取儲存路徑。 您可以在這些外部位置啟用「後援模式」,以回退至為舊版工作負載定義的任何叢集或筆記本範圍的 credentials。 然後,移轉完成後,關閉後援模式。 請參閱 什麼是後援模式?

如需詳細資訊,請參閱 為舊版工作區 Hive 中繼存放區啟用Hive中繼存放區同盟

步驟 2. 在 Unity 中對聯邦 catalog 執行新的工作負載 Catalog

當您有同盟 catalog 時,您可以 grant SQL 分析師和數據科學取用者存取它,並開始開發指向它的新工作負載。 新的工作負載得益於 Unity Catalog中的附加功能 set,包括存取控制、搜尋和譜系。

圖表,顯示在Hive中繼存放區上執行的現有工作負載,以及在鏡像 Unity 上執行的新工作負載 Catalog 同盟 catalog、hms_in_uc

在此步驟中,您通常會執行下列動作:

  • 選擇 Unity Catalog相容的計算(也就是單一使用者或共用叢集存取模式、SQL 倉儲或無伺服器計算)。 請參閱 需求、支援的功能,以及的限制。
  • 將聯邦 catalog 設為計算資源上的 預設 catalog,或將 USE CATALOG hms_in_uc 新增至程式碼頂端。 由於同盟 catalog 中的架構和 table 名稱是 Hive 中繼存放區中這些名稱的確切鏡像,因此您的程式代碼會開始參考同盟 catalog。

步驟 3。 將現有作業移轉至聯邦 catalog 執行

要將現有作業移轉以便查詢聯邦 catalog:

  1. 將作業叢集上的預設 catalog 變更為 hms_in_uc,方法是在叢集本身上設定 屬性,或在程式代碼頂端新增 USE CATALOG hms_in_uc
  2. 將作業切換至單一使用者或共用存取模式計算,並升級至其中一個支援Hive中繼存放區同盟的 Databricks Runtime 版本。 請參閱 需求、支援的功能,以及的限制。
  3. 要求 Azure Databricks 系統管理員 grant 作業所存取之任何雲端記憶體路徑(包含在 Unity Catalog 外部位置)上,hms_in_uc 中數據對象的正確 Unity Catalog 許可權。 請參閱 在 Unity Catalog中管理許可權。

HMS 聯邦在移轉背景中的概觀的圖表第二個實例

步驟 4. Deny Hive 中繼存放區的存取權

移轉所有工作負載以查詢同盟 catalog之後,就不再需要Hive中繼存放區。 您可以使用舊版 table 訪問控制和計算許可權,封鎖從 Azure Databricks 工作區直接存取 Hive 中繼存放區。 例如,您可以:

  1. Revoke Hive 中繼存放區中物件的所有權限 catalog。

    MSCK REPAIR PRIVILEGES 命令對於此用途而言很方便。 請參閱 MSCK REPAIR PRIVILEGESHive 中繼存放區權限與可保護物件 (舊版)

  2. 防止使用者使用計算原則建立和使用略過訪問控制 table 叢集(不使用隔離共用存取模式的叢集或舊版自定義叢集類型)。

    請參閱 管理計算組態

  3. 將同盟 catalog 預設為工作區 catalog。

    請參閱 以管理預設 catalog

常見問題

下列各節提供有關Hive中繼存放區同盟的詳細資訊。

什麼是後援模式?

後援模式 是外部位置的一種設定,您可以在移轉至 Unity Catalog期間使用它來略過 Unity Catalog 的許可權檢查。 設定可確保尚未移轉的工作負載在安裝階段不會受到影響。

Unity Catalog 使用外部位置來取得雲端儲存的存取權,這些外部位置是可以加密的實體物件,定義了存取雲端儲存帳戶所需的路徑和憑證。 您可以發出許可權,例如 READ FILES,以控管誰可以使用路徑。 遷移過程中的一個挑戰是,您可能不希望 Unity Catalog 立即開始管理對路徑的所有存取,例如,當您有參考路徑的現有未遷移工作負載時。

備援模式可讓您延遲對外部位置嚴格執行 Unity Catalog 訪問控制。 當後援模式被啟用時,會先針對 Unity Catalog 許可權檢查存取路徑的工作負載,如果失敗,則會回退到使用叢集或筆記本範圍的 credentials,例如實例配置檔或 Apache Spark 組態屬性。 這可讓現有的工作負載繼續使用其目前的認證。

後援模式僅供移轉期間使用。 當所有工作負載都已移轉,且您已準備好強制執行 Unity Catalog 存取控制時,您應該將其關閉。

查詢備援使用情況的稽核記錄

使用下列查詢來檢查過去 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

什麼是授權路徑?

當您建立同盟 catalog時,系統會提示您提供 授權路徑, 儲存 Hive 中繼存放區 tableswhere 雲端記憶體。 您想要透過 Hive 中繼資料庫聯邦存取的任何 table,都必須被這些路徑所包含。 Databricks 建議您的授權路徑應為跨大量 tables普遍採用的子路徑。 例如,如果您在 abfss://container@storageaccount.dfs.core.windows.net/bucket/table1./bucket/table2./bucket/table3有 tables,則應該提供 abfss://container@storageaccount.dfs.core.windows.net/bucket/ 作為授權路徑。

您可以使用 UCX,協助您識別 Hive 中繼存放區中存在的路徑。

授權路徑通過允許 catalog 擁有者能夠對使用者透過聯邦存取的數據設置護欄,在聯邦 catalogs 上新增額外的安全層。 這在您的 Hive 中繼存放區允許使用者 update 元數據並任意改變 table 位置時很有用,因為否則這些更新將會同步至同盟 catalog。 在此案例中,使用者可能會將他們已能存取的 tables 重新定義,讓其指向原本無法存取的新位置。

是否可以使用UCX建立Hive metastores 同盟?

將 Azure Databricks 工作區遷移至 Unity Catalog的 Databricks Labs 專案 UCX 包含啟用 Hive 中繼存放區同盟的公用程式:

  • enable-hms-federation
  • create-federated-catalog

請參閱 GitHub中的 專案自述檔。 如需 UCX 的簡介,請參閱 使用 UCX 公用程式將您的工作區升級至 Unity Catalog

需求、支援的功能和限制

下列 table 列出Hive中繼存放區同盟所支援的服務和功能。 在某些情況下,也會列出不支持的服務或功能。 在這些 tables中,「HMS」代表 Hive 資料存儲系統。

類別 支援 不支援
Metastores - 舊版工作區 Hive metastores (Databricks 內部)
- 外部 metastores 使用 mySQL 在 Apache Hive 0.13 版或 2.3 版上運行
- 非 mySQL 資料庫中的外部 metastores
- Hive 3.1
操作 - 內部 Databricks HMS:讀取和寫入
- 外部 HMS:唯讀
Hive 中繼存放區數據資產 - Hive 中繼存放區中的管理型和外部 tables
-模式
- Views
- Hive SerDe tables
- Hive 函式和使用者定義函數 (UDF)
- 在同盟 catalog 中定義新的淺層複製
- JDBC 支援的 tables
- Delta 分享 tables
- 透過聯邦 catalog 存取 Hive 中繼資料庫中註冊的淺層複製
存儲 - Azure Data Lake Storage Gen2
- Tables 參考 DBFS 掛接位置,包括 DBFS 根目錄
- Tables 其路徑與在外部位置中定義的其他 HMS table 路徑重疊
- HMS tables 其路徑與原生 Unity Catalog 對象路徑重疊
- 存取外部 HMS 註冊的 DBFS 根目錄或掛載位置中的 tables
- 從定義內部 HMS 以外的任何工作區,存取 DBFS 根目錄或掛接位置中的 tables
工作空間儲存帳戶的 - 防火牆支援
計算類型 - 共用叢集
- 單一使用者(專門指派)叢集
- 無伺服器 (全部)
- SQL 倉庫(全部)
沒有隔離叢集
計算版本號 - 所有 Databricks SQL 通道
- 所有 Delta Live Tables 頻道
- Databricks Runtime 13.3 LTS
- Databricks Runtime 14.3 LTS
- Databricks Runtime 15.1 和更新版本
Unity Catalog 功能 - Unity Catalog 許可權模型
- 資料列篩選和 column 遮罩
-審計
- 下游譜系
- Table 搜尋
- 跨工作區存取權(DBFS 根目錄和掛接除外)
- 資料存取僅限於定義的外部位置
- Delta Sharing
- Lakehouse 監視
- 向量搜尋
- 在線 tables
- 某些功能存放區功能,包括功能存放區建立、模型服務建立、功能規格建立、模型記錄和批次評分
- 您無法將 Delta Live Tables 具體化 views 和串流 tables 寫入同盟 catalog,但您可以使用同盟資產作為 Delta Live Tables 具體化 views 和串流 tables的來源。
- 將舊版 table ACL 自動移轉至 Unity Catalog 同盟 catalog的許可權。 UCX 可協助您解決此問題。