資料目錄用於將DLF、Hive Metastore(HMS)、StarRocks或Hologres等外部中繼資料服務註冊到EMR Serverless Spark工作空間。註冊完成後,您可以在控制台查看其中的資料庫、表和欄位,並在SQL、互動式會話或Spark作業中通過Catalog名稱訪問資料。該功能適用於需要中繼資料隔離或跨資料來源分析的情境。
Catalog介紹
EMR Serverless Spark提供了靈活的Catalog管理機制,支援多種類型的Catalog(例如Paimon、Iceberg、StarRocks等),以滿足不同情境的需求。除了資料目錄方式外,還支援內建的Catalog以及自訂Catalog。本部分將詳細介紹Serverless Spark中Catalog的分類、配置方法及其使用方式。
Catalog類型 | 支援資料來源 | 添加方式 | 特性說明 | 使用方式 |
資料目錄Catalog |
| 需在数据目录頁面手動添加Catalog。 | 新增Catalog後,需要重啟一次正在啟動並執行會話,以使其生效。 |
|
自訂Catalog | Paimon、Iceberg等 | 通過編輯會話,在Spark 配置中添加相應類型的參數。 | 需自行配置參數,支援擴充多種資料來源。詳情請參見使用Iceberg和Paimon使用指南。 | |
添加資料目錄
進入資料目錄頁面。
在左側導覽列,選擇EMR Serverless > Spark。
在Spark頁面,單擊目標工作空間名稱。
在EMR Serverless Spark頁面,單擊左側導覽列中的数据目录。
說明資料目錄頁面為您展示了建立叢集時您選擇的DLF資料目錄下的資料庫和表。
單擊添加数据目录。
在添加数据目录對話方塊中,選擇Catalog類型並配置相應參數,單擊添加。支援以下Catalog類型。
DLF資料目錄
DLF 数据目录是一種中繼資料管理服務,用於管理和查詢儲存在資料湖中的中繼資料。通過選擇已有的DLF資料目錄或建立新的資料目錄,您可以快速接入資料湖中的中繼資料。
如果您想建立新的DLF資料目錄,可以單擊创建数据目录,跳轉至資料湖構建控制台建立,詳情請參見中繼資料管理。
使用DLF資料目錄時,僅支援使用以下引擎版本:esr-4.3.0及以上版本、esr-3.3.0及以上版本、esr-2.7.0及以上版本。
Hive Metastore(HMS)資料目錄
外部 Hive Metastore是一種獨立的中繼資料服務,通常用於管理Hive表的中繼資料。通過配置該服務,您可以將外部Hive Metastore中的中繼資料整合到當前環境中。
使用該方式,需確保Serverless Spark與該服務所在VPC已經連通。
參數 | 說明 |
网络连接 | 當前環境與外部Hive Metastore所在VPC的網路連接配置。 在下拉式清單中選擇已建立的網路連接名稱,具體請參見步驟一:新增網路連接。 說明
|
Metastore 服务地址 | 外部Hive Metastore的服務地址,格式為 其中:
|
Kerberos認證 | 如果您的外部Hive Metastore開啟Kerberos認證,您需要指定keytab檔案地址,以及Principal名稱。
|
添加外部Metastore服務,請參見串連外部Hive Metastore Service。
StarRocks資料目錄
StarRocks是一款高效能的AnalyticDB。通過添加StarRocks資料目錄,您可以在EMR Serverless Spark中註冊StarRocks執行個體的中繼資料資訊,添加成功後即可在任務和會話中直接讀寫StarRocks中的資料,無需在每個任務中單獨配置串連參數。使用該方式,需確保Serverless Spark與StarRocks執行個體所在VPC已連通。
添加成功後,您可以在SQL中通過三段式文法直接讀寫StarRocks中的資料,例如:SELECT * FROM <catalogName>.<dbName>.<tableName>;
使用StarRocks資料目錄,僅支援使用以下引擎版本:esr-4.8.0及以上版本、esr-5.2.0及以上版本。
參數 | 說明 |
数据目录名称 | StarRocks資料目錄的名稱,用於在SQL中引用該Catalog。同一工作空間內,資料目錄名稱不允許重複。 |
网络连接 | 當前環境與StarRocks執行個體所在VPC的網路連接配置。在下拉式清單中選擇已建立的網路連接名稱。具體操作,請參見步驟一:新增網路連接。 說明
|
Endpoint | StarRocks的FE訪問地址, |
查询端口 | StarRocks的FE查詢連接埠,通常是9030。 |
用户名 | 訪問StarRocks的使用者名稱。該使用者名稱將用於Spark任務讀寫StarRocks資料時的身份認證。 |
密码 | 上述使用者對應的密碼。 |
讀寫StarRocks資料的詳細操作,請參見讀寫StarRocks。
Hologres資料目錄
Hologres是一款即時數倉產品,支援海量資料的即時寫入和即時分析。通過添加Hologres資料目錄,您可以在EMR Serverless Spark中註冊Hologres執行個體的中繼資料資訊,添加成功後即可在任務和會話中直接讀寫Hologres中的資料,無需在每個任務中單獨配置串連參數。使用該方式,需確保Serverless Spark與Hologres執行個體所在VPC已連通。
添加成功後,您可以在SQL中通過三段式文法直接讀寫Hologres中的資料,每個 Catalog 嚴格綁定一個 Hologres Database,且不可跨庫訪問(即無法通過同一 Catalog 訪問多個 Hologres DB)。Catalog 內部的邏輯組織與 Hologres 保持一致:
Spark 概念 | 對應 Hologres 概念 | 說明 |
Catalog | Database | 如 |
Namespace | Schema | 如 |
Table | Table | 必須顯式指定 |
使用Hologres資料目錄,僅支援使用以下引擎版本:esr-4.9.0及以上版本。
參數 | 說明 |
数据目录名称 | Hologres資料目錄的名稱,用於在SQL中引用該Catalog。同一工作空間內,資料目錄名稱不允許重複。 |
网络连接 | 當前環境與Hologres執行個體所在VPC的網路連接配置。在下拉式清單中選擇已建立的網路連接名稱。具體操作,請參見步驟一:新增網路連接。 說明
|
Endpoint | Hologres執行個體訪問地址,可在Hologres控制台的執行個體詳情頁擷取。 |
查询端口 | Hologres執行個體的連接埠號碼,通常是80。 |
用户名 | 訪問Hologres的使用者名稱。該使用者名稱將用於Spark任務讀寫Hologres資料時的身份認證。
|
密码 | 上述使用者對應的密碼。
|
讀寫Hologres資料的詳細操作,請參見讀寫Hologres。
查看資料庫和表
在数据目录頁面,單擊資料目錄ID。
展示當前資料目錄下的所有資料庫資訊。
單擊操作列的表。
展示當前資料庫下的所有資料表資訊。
單擊操作列的字段。
展示當前資料表的表資訊和列資訊。
使用資料目錄
在SQL中使用資料目錄
添加資料目錄後,您可以在SQL開發或互動式會話中通過Catalog名稱訪問其中的庫表,無需在每個任務中重複填寫串連資訊。
切換預設Catalog和資料庫
切換後,後續SQL可以直接參考資料表名,不必寫完整的三段式名稱。
-- 切換預設Catalog
USE <catalogName>;
-- 切換預設Catalog和資料庫
USE <catalogName>.<dbName>;使用三段式名稱查詢
不切換預設Catalog時,用catalogName.dbName.tableName直接引用目標表。
SELECT * FROM <catalogName>.<dbName>.<tableName>;Hologres資料目錄的第二段名稱是Schema,不是資料庫。每個Hologres資料目錄綁定一個Database,預設Schema為public。
-- Hologres:第二段為Schema,預設為public
SELECT * FROM <hologresCatalog>.public.<tableName>;
-- 也可以先切換Catalog和Schema,再直接參考資料表名
USE <hologresCatalog>;
USE public;
SELECT * FROM <tableName>;跨Catalog關聯查詢
同一條SQL中可以用三段式名稱引用不同資料目錄的表,實現跨資料來源關聯。例如將DLF中的使用者維表與Hologres中的訂單表關聯:
SELECT
d.user_id,
d.user_name,
o.order_id,
o.amount
FROM dlf_catalog.user_db.dim_user AS d
JOIN hologres_catalog.public.orders AS o
ON d.user_id = o.user_id;執行前請確認相關資料目錄均已添加、網路可達,且當前身份具有對應庫表的存取權限。
在PySpark中使用資料目錄
在PySpark中,同樣使用三段式名稱讀寫資料目錄中的表。
# 讀取表
df = spark.table("<catalogName>.<dbName>.<tableName>")
# 寫入表
(
df.write
.mode("append")
.saveAsTable("<catalogName>.<dbName>.<tableName>")
)也可以讀取不同資料目錄的表後再關聯:
dim_user = spark.table("dlf_catalog.user_db.dim_user")
orders = spark.table("hologres_catalog.public.orders")
result = orders.join(dim_user, on="user_id", how="inner")
result.show()寫入前請確認目標資料來源支援相應的寫入方式,且當前帳號具有寫入許可權。
刪除資料目錄
在数据目录頁面,找到目標資料目錄。
單擊操作列的刪除,並按頁面提示確認。
刪除資料目錄僅移除當前工作空間中的註冊資訊,不會刪除DLF、HMS、StarRocks或Hologres中的資料庫、表和資料。
刪除後,正在啟動並執行會話可能仍保留原有配置。請重啟會話,確認該Catalog已不可訪問。
常見問題
添加資料目錄後,SQL中提示Catalog不存在
正在啟動並執行互動式會話不會自動重新整理資料目錄配置。請重啟會話後重試,並確認SQL中的Catalog名稱與資料目錄頁面顯示的一致。新啟動的會話和作業會在啟動時載入最新配置。
資料目錄添加失敗或連通性測試失敗
請按以下順序排查:
網路連接是否處於可用狀態。
工作空間與目標服務是否位於同一地區和預期VPC。
路由、安全性群組和目標服務白名單是否允許訪問。
Endpoint和連接埠是否填寫正確。
使用者名稱、密碼或認證方式是否正確。
當前引擎版本是否滿足該資料目錄類型的要求。
DLF列表中沒有目標資料目錄
DLF資料目錄與地區綁定。請確認目標資料目錄與當前工作空間位於同一地區,並檢查當前帳號是否具有讀取該資料目錄的許可權。
HMS連線逾時
請檢查網路連接狀態、安全性群組規則、HMS服務運行狀態以及Thrift連接埠。連接埠預設為9083,實際以部署配置為準。如果提示地址無法解析,請檢查工作空間所在VPC的DNS配置,或改用可達的內網地址。
Hologres查詢提示表不存在
Hologres資料目錄綁定單個Database,查詢時還需指定正確的Schema。請使用catalogName.schemaName.tableName,或先執行USE <schemaName>。預設Schema通常為public。
可以在一個工作空間中添加多個資料目錄嗎
可以。同類型和不同類型的資料目錄都可以添加多個,各自獨立註冊,但名稱在同一工作空間內不能重複。需要訪問多個Hologres Database時,請為每個Database分別添加一個資料目錄。
刪除資料目錄會刪除業務資料嗎
不會。刪除操作只移除工作空間中的註冊資訊,外部服務中的資料庫、表和資料不受影響。
為什麼Catalog類型中沒有MaxCompute和Iceberg
MaxCompute通過Spark MaxCompute Connector接入,不在資料目錄頁面註冊。Iceberg屬於自訂Catalog,需要在會話或作業的Spark配置中啟用,詳情請參見使用Iceberg。
DLF資料目錄預設使用Paimon格式,無需單獨添加Paimon類型的資料目錄。關於Paimon的更多用法,請參見Paimon使用指南。