本文說明如何將外部 Hive 中繼存放區聯邦化,以便您的組織可以透過 Unity Catalog 使用 Hive 中繼存放區的資料表。
如需了解 Hive 中繼資料存放區聯盟的概觀,請參閱 Hive 中繼資料存放區聯盟:啟用 Unity Catalog 以管理在 Hive 中繼資料存放區中註冊的資料表。
開始之前
檢閱Hive中繼存放區同盟所支援的服務與功能清單:需求、支援的功能,以及的限制。
下面每個步驟都會列出特定需求。
步驟 1:將 Unity 目錄連線到外部 Hive 中繼存放區
在此步驟中,您會建立 連線,這是一個 Unity Catalog 中的可保護物件,指定用來存取資料庫系統的路徑和憑證,在此案例中為您的 Hive 中繼存放區。
要求
您必須具備下列條件:
- 用戶名稱和密碼,用來授與用於承載 Hive 中繼存放區的資料庫系統的存取權。
- 資料庫的 URL(主機和埠)。
- 資料庫名稱。
- Unity Catalog 中繼資料庫上的
CREATE CONNECTION
權限。 中繼存放區管理員預設具有此許可權。
建立連線
若要建立連線,您可以在 Azure Databricks 筆記本或 Databricks SQL 查詢編輯器中使用目錄總管或 CREATE CONNECTION
SQL 命令。
注意
您也可以使用 Databricks REST API 或 Databricks CLI 來建立連線。 請參閱 POST /api/2.1/unity-catalog/connections,以及 Unity Catalog 指令。
目錄瀏覽器
在您的 Azure Databricks 工作區中,按兩下
目錄。
在 [快速存取] 頁面上,按兩下 [[新增資料] > [新增連線]。
在 [設定連線 精靈] 的 [連線基礎] 頁面上,輸入使用者友善的 [連線名稱]。
選取
連線類型 的Hive 中繼存放區 和外部的中繼存放區類型 。 (選擇性)新增批注。
點選 [下一步]。
在 [驗證] 頁面中,輸入下列內容以設定您的主機端資料庫:
-
主機:例如,
mysql-demo.lb123.us-west-2.rds.amazonaws.com
-
端口:例如,
3306
-
使用者:例如,
mysql_user
-
密碼:例如,
password123
-
主機:例如,
點選 [下一步]。
在 [連線詳細資料] 頁面上,為您的伺服器資料庫選取或輸入下列專案:
- 資料庫類型:選取 MySQL、SQLSERVER或 POSTGRESQL。
- 版本:支援的 Hive 中繼存放區版本包括 0.13、2.3 和 3.1。
- 資料庫:您要連線的資料庫名稱。
(選擇性)如果資料庫實例不使用 CA 簽署的伺服器證書,請選擇 [信任伺服器憑證] 。
點選 「建立連線」。
在 目錄基本概念 頁面上,輸入外國目錄的名稱。
針對 授權路徑,請選擇可透過目錄存取的雲端記憶體路徑。 只有落在這些路徑下的數據表可以透過同盟目錄來查詢。 路徑必須由外部位置覆蓋。 如需詳細資訊,請參閱 什麼是授權路徑?。
在 [Access] 頁面上,選取使用者可以存取您所建立目錄的工作區。 您可以選取 [所有工作區都有存取權],或按一下 [指派給工作區],選取工作區,然後按一下 [指派]。
新增一名可管理目錄中所有物件存取權的擁有者。 開始在文字框中輸入使用者或群組,然後點選傳回結果中的使用者或群組。
對目錄授予許可權。
- 點擊 授與。
- 指定可以存取目錄中物件的 主要角色。 開始在文字框中輸入使用者或群組,然後點選傳回結果中的使用者或群組。
- 選擇 許可權預設,以授予每個使用者或群組。 根據預設,所有帳戶用戶都會被授與
BROWSE
。- 從下拉功能表中選取 [數據讀取器],以授與目錄中物件
read
許可權。 - 從下拉功能表中選取 [數據編輯器],以授與目錄中物件的
read
和modify
許可權。 - 手動選取要授與的許可權。
- 從下拉功能表中選取 [數據讀取器],以授與目錄中物件
- 點擊 授與。
點選 [下一步]。
在[元數據]頁面上,可選地指定標籤為鍵值對。 如需詳細資訊,請參閱 將標籤套用至 Unity Catalog 安全性實體物件。
(選擇性)新增批注。
點選 儲存。
SQL
在筆記本或 SQL 查詢編輯器中執行下列命令。
CREATE CONNECTION <connection-name> TYPE hive_metastore
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>',
database '<database-name>',
db_type 'MYSQL',
version '2.3'
);
建議您使用 Azure Databricks 機密 來取代純文本字串,用於如認證等的敏感數值。 例如:
CREATE CONNECTION <connection-name> TYPE hive_metastore
OPTIONS (
host '<hostname>',
port '<port>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>'),
database '<database-name>',
db_type 'MYSQL',
version '2.3'
);
如果您必須在 Notebook SQL 命令中使用純文本字符串,請避免因特殊字符(如 $
)而截斷字符串,應使用 \
來逸出這些特殊字符。 例如:\$
。
如需設定秘密的相關信息,請參閱 秘密管理。
步驟 2:在 Hive 中繼存放區中建立數據的外部位置
在此步驟中,您會在 Unity 目錄中設定外部位置,以控管存放在外部 Hive 中繼存放區中註冊數據的雲端儲存位置存取權。
外部位置 是 Unity Catalog 安全性實體物件,可將 儲存憑證 與雲端儲存容器路徑產生關聯。 請參閱 儲存認證和外部位置。
要求
如需雲端儲存和 Azure Databricks 許可權需求,請參閱「開始之前」中的 建立外部位置以將雲端儲存連線至 Azure Databricks。
建立外部位置的選項
Databricks 建議在 Unity 目錄中建立外部位置的程序取決於您的情況:
- 如果您要將 Hive 中繼存放區聯合以便將數據儲存在
DBFS 掛載 ,請使用 Catalog Explorer 建立外部位置,並使用 [從 DBFS 掛載 複製] 選項。 請參閱選項 1:使用目錄總管建立外部位置,或為 DBFS 根目錄中的數據建立外部位置(舊版)。 - 否則,您可以使用目錄總管或 SQL 命令。 請參閱 選項 1:使用目錄總管建立外部位置 或 選項 2:使用 SQL 建立外部位置。
在外部位置上啟用後援模式
一旦您在 Unity 目錄中建立外部位置,當您在已啟用 Unity 目錄的計算上執行查詢時,Unity 目錄許可權會強制執行該外部位置所代表路徑的存取權。 這可能會中斷現有工作負載,這些工作負載沒有正確的 Unity Catalog 權限來訪問該路徑。
當外部位置處於備援模式時,系統會先檢查查詢主體在該位置的 Unity Catalog 許可權,如果不成功,就會改用現有的叢集或筆記本限定憑證,例如實例配置文件或 Apache Spark 配置屬性,以確保您的現有工作負載能繼續不間斷地執行。
當您在移轉舊版工作負載的過程中,備援模式相當便利。 更新您的工作負載以使用 Unity 目錄許可權成功執行之後,您應該停用備援模式,以防止使用舊版叢集範圍的憑證來繞過 Unity 目錄資料管理。
您可以使用 Catalog Explorer 或 Unity Catalog 外部位置 REST API 來啟用後援模式。
所需 許可權:外部位置的擁有者。
目錄瀏覽器
- 在您的 Azure Databricks 工作區中,按兩下
目錄。
- 在 [快速存取] 頁面上,點擊 [外部資料] >。
- 選擇您要更新的外部位置。
- 請開啟後援模式切換,然後點擊啟用以確認。
API(應用程式介面)
下列 curl 範例示範如何在建立外部位置及更新現有外部位置時啟用後援模式。
建立新的外部位置:
curl -X POST -H 'Authorization: Bearer <token>' \
https://<workspace-URL>/api/2.1/unity-catalog/external-locations \
--data
'{
"name": "fallback_mode_enabled_external_location",
"url": "abfss://container-name@storage-account.dfs.core.windows.net/external_location_container/url",
"credential_name": "external_location_credential",
"fallback": true
"skip_validation": true
}'
更新外部位置:
curl -X PATCH \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
https://<workspace-URL>/api/2.1/unity-catalog/external-locations/<external-location-name> \
--data
'{
"comment": "fallback mode enabled",
"fallback": true
}'
步驟 3:建立外部目錄
注意
如果您使用目錄總管中的連線建立精靈來完成步驟 1,您可能已經完成此步驟。 如果您在完成步驟 1 時未建立外部目錄,或是使用 SQL 來建立連線,則必須遵循本節中的指示。
在此步驟中,您會使用您在步驟 1 中建立的連線,在 Unity 目錄中建立外部目錄,指向您在步驟 2 中建立的外部位置。 外部目錄 是 Unity Catalog 中的可保護物件,它可以鏡像外部數據系統中的資料庫或目錄,使您能夠在 Azure Databricks 工作區中執行查詢,並透過 Unity Catalog 管理存取權。 在此情況下,鏡像目錄是您在Hive中繼存放區中註冊的數據。
每當使用者或工作流程與外部目錄互動時,元數據就會從Hive中繼存放區同步處理。
需求
權限要求:
若要建立外國目錄:
- Unity 目錄中繼存放區上的
CREATE CATALOG
許可權。 - 連線的擁有權或在此連線上的
CREATE FOREIGN CATALOG
許可權。 - 若要輸入外部目錄的授權路徑,您必須在涵蓋這些路徑的外部位置上具有
CREATE FOREIGN SECURABLE
許可權。 根據預設,外部位置的擁有者具有此許可權。
若要使用外國目錄:
- 對於目錄或
USE CATALOG
的擁有權
計算需求:
- 若要使用目錄總管建立目錄:不需要計算。
- 若要使用 SQL:Databricks Runtime 13.3 LTS 或以上版本建立目錄。
- 若要使用目錄:需要 Databricks Runtime 13.3 LTS、14.3 LTS、15.1 或更新版本的標準存取模式的計算環境。
建立外國目錄
若要建立外部目錄,您可以在 Azure Databricks 筆記本或 SQL 查詢編輯器中使用目錄總管或 CREATE FOREIGN CATALOG
SQL 命令。
請參閱 管理及使用外部目錄。
注意
您也可以使用 Unity 目錄 API。 請參閱 Databricks REST API 參考中的 建立目錄。
目錄瀏覽器
在您的 Azure Databricks 工作區中,按一下
以開啟目錄總管。
在 [快速存取] 頁面上,點擊 [新增資料],然後選取 [新增目錄]。
輸入 目錄名稱,然後選擇 外部目錄類型。
從下拉式清單中選擇您在步驟 1 中建立的連線。
在 [授權路徑] 欄位中,輸入您在步驟 2 中定義為外部位置的雲端儲存位置路徑。 例如,
abfss://container@storageaccount.dfs.core.windows.net/demo, abfss://container@storageaccount.dfs.core.windows.net/depts/finance
。授權路徑是由 Hive Metastore 聯盟支援的外部目錄的一層額外安全措施。 請參閱 什麼是授權路徑?。
點擊 建立。
(可選)單擊 [設定] 開啟精靈,引導您授予目錄的許可權並新增標籤。 您也可以稍後執行這些步驟。
請參閱 在 Unity Catalog 中管理權限,以及 將標籤套用至 Unity Catalog 的安全性物件。
(選擇性)將目錄系結至特定工作區。
根據預設,可以從連結至 Unity 目錄中繼存放區的任何工作區存取目錄(受限於用戶許可權)。 如果您想要只允許來自特定工作區的存取權,請移至 [工作區] 索引標籤並指派工作區。 請參閱 限制特定工作區的目錄存取。
使用 Hive 中繼資料庫的元數據來填充外部資料目錄。
每當使用者或工作流程與外部目錄互動時,元數據就會從Hive中繼存放區同步處理。 第一次操作會將目錄填入 Unity Catalog 並在目錄總管界面中顯示其內容。 您可以在目錄總管中選取並啟動支援 的計算資源,以填充目錄。 您必須是目錄擁有者(因為您是目錄的建立者)或是具有
USE CATALOG
許可權的使用者。
SQL
在筆記本或 SQL 查詢編輯器中執行下列 SQL 命令。 括弧中的項目是選擇性專案。 替換佔位符值:
-
<catalog-name>
:Azure Databricks 中目錄的名稱。 -
<connection-name>
:您在步驟 1 中建立的連接物件名稱。 -
<path1>,<path2>
:您在步驟 2 中定義為外部位置的雲端儲存位置路徑。 例如,abfss://container@storageaccount.dfs.core.windows.net/demo, abfss://container@storageaccount.dfs.core.windows.net/depts/finance
。 授權路徑是由 Hive Metastore 聯盟支援的外部目錄的一層額外安全措施。 請參閱 什麼是授權路徑?。 請參閱 什麼是授權路徑?。 如果您在建立目錄時未新增授權路徑,您可以使用ALTER CATALOG
稍後加以新增。 請參閱 ALTER CATALOG。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (authorized_paths '<path1>,<path2>');
每當使用者或工作流程與聯邦目錄互動時,元數據就會從 Hive Metastore 同步處理。