数据目录用于将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是一款高性能的分析型数据库。通过添加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使用指南。