一、StarRocks 是什么
在腾讯云弹性 MapReduce 产品中,我们提供了完全开箱即用的 StarRocks 服务,详细可参考 StarRocks 简介。
二、StarRocks+DLC 湖仓一体查询加速
腾讯云数据湖 DLC 支持基于 EMR StarRocks 的湖仓一体查询加速模式,该模式无需将数据导入 StarRocks 或创建外部表,即可直接对 DLC 数据源执行复杂 SQL 查询。基于 StarRocks 的 MPP 向量化查询能力,提升了数据分析效率并降低了运维难度和成本。
接下来,这里说明如何开启 DLC + (EMR)StarRocks 湖仓一体查询加速。
三、前提条件
1. 已购买弹性 MapReduce StarRocks 集群。
2. 已开通数据湖计算 DLC 服务。
注意:1. 当前暂不支持跨地域联邦 DLC,请合理规划环境,确保 EMR StarRocks、DLC 在相同地域。
注意:2. 暂不支持查询2024年6月12日前创建的 DLC 存量原生表(DLC 存量原生表的存储路径为 lakefs://*** ,此格式暂不兼容)—— 可支持6月12日后创建的 DLC 新原生表(存储路径为cosn://***)及 DLC 所有外表。
注意:3. StarRocks 仅支持查询 DLC 数据,不支持执行写和删除 DLC 数据的操作。
为开通 DLC+StarRocks 湖仓一体查询加速,你需要首先开启 DLC 外部访问,让 StarRocks 集群可访问到 DLC 内部托管存储的数据。随后在 StarRocks 集群中创建 DLC External Catalog,即可使用 StarRocks 计算引擎直接分析 DLC 存储数据。
四、开启 DLC 外部访问
进入 数据湖计算 DLC 控制台,单击存储配置菜单,选择开启外部访问。
第一步:单击“开启外部访问托管存储”,开启后你同一腾讯云账号下的 EMR StarRocks 集群即可访问 DLC 内部托管存储。后续你在此通过单击开关,来开启或关闭 DLC 内部托管存储的外部访问服务。
开启外部访问的账号需要有 DLC 的管理权限,请使用主账号(或有 DLC 管理员权限的子账号)进行此操作。
注意:1. 若你已有 DLC 的管理员权限,此步骤可忽略。
注意:2. 若你使用的是子账号,且没有 DLC 管理员权限,可参考文档 子账号权限管理 让有 DLC 管理员权限的账号为你授权。
第二步:为确保你 EMR StarRocks 集群能正确访问到 DLC 的元数据 Catalog 服务,你需要将 EMR StarRocks 的 VPC 绑定到 DLC 网络中。
1. 单击“绑定VPC”,在对话框中类型选择 EMR StarRocks,并在 EMR 实例下拉列表选择需要绑定的 EMR StarRocks 集群实例 ID;
2. StarRocks 集群所在 VPC 将被自动填充,你可在备注名称中输入易于识别的别名;
第三步:完成 VPC 绑定后,你在 StarRocks 集群中即可通过 Catalog 访问地址显示的 URI 连接串,连接到 DLC 元数据服务,如:
注意:URI 连接串示例:
注意:Catalog 访问地址: thrift://172.17.1.18:7004。
到此,你的 EMR StarRocks 集群已经可直接分析 DLC 内部托管数据。在开始分析前,你还需要在 StarRocks 中创建 DLC External Catalog。
五、创建 DLC External Catalog
登录 StarRocks 并在 StarRocks 中创建 DLC Catalog。关于 External Catalog 详情请参见 CREATE EXTERNAL CATALOG | Overview。
六、语法
CREATE EXTERNAL CATALOG dlc_iceberg_cos_catalog
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"iceberg.catalog.hive.metastore.uris" = "thrift://169.254.0.171:8007",
"aws.s3.endpoint" = "cos.ap-chongqing.myqcloud.com",
"aws.s3.access_key" = "腾讯云secret id",
"aws.s3.secret_key" = "腾讯云secret_key"
);
七、参数说明
| 参数 | 说明 |
| type | 数据源的类型,默认设置为 Iceberg。 |
| iceberg.catalog.type | Iceberg 集群所使用的元数据服务的类型。设置为 hive。 |
| iceberg.catalog.hive.metastore.uris | DLC 元数据的 URI。 |
| aws.s3.endpoint | 用于访问兼容 S3 协议的对象存储的 Endpoint。腾讯云 COS 的格式为cos.<region>.myqcloud.com,<region>可选值为ap-beijing,ap-shanghai,ap-guangzhou 等。 |
| aws.s3.access_key | 腾讯云账号密钥中的 SecretID。 |
| aws.s3.secret_key | 腾讯云账号密钥中的 SecretKey。 |
注意:1. 出于安全性考虑,在上述 SecretID 及 SecretKey 配置中,你需要使用主账号的 SecretID 及 SecretKey 才能正确访问 DLC 内部存储。具体可通过主账号登录腾讯云后,在访问管理控制台 >登录 – 腾讯云页面获取 SecretID 和 SecretKey。
注意:2. 如果你需要使用子账号的 SecretID 及 SecretKey 访问 DLC 内部托管存储,可参考这篇档最后一部分使用子账号 SecretID/SecretKey 访问。
八、示例
以下示例演示创建一个名为 DLC_catalog 的 DLC Catalog:
CREATE EXTERNAL CATALOG dlc_hive_cos_catalog
PROPERTIES
(
"type" = "Iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://169.254.0.171:8007",
"aws.s3.endpoint" = "cos.ap-chongqing.myqcloud.com",
"aws.s3.access_key" = "**********",
"aws.s3.secret_key" = "**********")
你如果需要通过 StarRocks 直接查询 DLC 托管存储中的 Hive 表,则你需要创建另一个 DLC Hive catalog,具体将 type 设置为 hive,示例如下:
CREATE EXTERNAL CATALOG dlc_hive_cos_catalog
PROPERTIES
(
"type" = "hive",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://169.254.0.171:8007",
"aws.s3.endpoint" = "cos.ap-chongqing.myqcloud.com",
"aws.s3.access_key" = "**********",
"aws.s3.secret_key" = "**********"
)
九、DLC 准备表和数据
创建 Iceberg 表的示例如下:
CREATE TABLE test_sr_ofs.`customer`(
`c_custkey` bigint,
`c_name` string,
`c_address` string,
`c_nationkey` int,
`c_phone` string,
`c_acctbal` double,
`c_mktsegment` string,
`c_comment` string) using iceberg;)
StarRocks 中查询数据:
#登录StarRocks节点
mysql -h 172.30.0.xxx -P9030 -u root -p
#指定iceberg catalog
set catalog dlc_iceberg_cos_catalog;
#指定数据库
use test_sr_ofs;
#查询customer表数据
select * from customer limit 5;
查询结果如下:
十、使用子账号 SecretID/SecretKey 访问(可选)
由于数据安全考虑,开启 DLC 外部访问后默认需要使用主账号 SecretID 及 SecretKey 在 EMR StarRocks 发起对 DLC 内部存储的访问。如因业务场景确需使用子账号 SecretID 及 SecretKey 访问,需要你使用主账号在 CAM 完成自定义策略创建并绑定到对应子账号。
十一、原理
在你按照这篇档上述指引开启 DLC 外部访问后,实质上系统授权了你的主账号具备访问 DLC 内部托管存储的权限。但出于数据安全考虑,你主账号名下其他子账号默认不具备此访问权限,需要你在腾讯云访问控制 CAM 中创建授权子账号具备访问能力的自定义策略,并绑定到需要访问 DLC 内部托管存储的子账号。具体步骤如下:
十二、第一步:生成自定义策略
使用主账号登录腾讯云,进入 数据湖计算 DLC 控制台,单击存储配置菜单,选择开启外部访问,在子账号授权中,单击“点击处理”。在弹出对话框点击复制,获得你需要创建的自定义 CAM 策略。
十三、第二步:创建允许子账号访问 DLC 内部存储的自定义策略
1. 使用主账号登录访问管理 CAM 控制台的 策略 页面。
2. 选择新建自定义策略 > 按策略语法创建,随后选择空白模板,单击下一步。
注意:说明:
注意:主账号给子账号授权数据访问权限,目前只能通过自定义策略授权,不支持通过预设策略授权。
3. 填写如下表单:
·策略名称:自行定义一个不重复且有意义的策略名称,例如 cos-child-account。
·备注:可选,自行编写。
·策略内容:粘贴第一步复制的自定义策略,例如:
{
"statement": [
{
"action": [
"cos:*"
],
"effect": "allow",
"resource": [
"qcs::cos:ap-shanghai:uid/1305424723:dlc03ff-100018379117-1647867281-100017307912-1304028854/*",
"qcs::cos:ap-shanghai:uid/1305424723:dlc0a65-100018379117-1680005779-100017307912-1304028854/*"
]
}
],
"version": "2.0"
}
注意:说明:
注意:以上策略表示将主账号有权操作的 DLC 托管存储均授权给子账号 。其中,uid/1305424723 中的1305424723为主账号 A 的 APPID,dlc0a65-100018379117-1680005779-100017307912-1304028854/*为你有权操作的 DLC 内部托管存储。
4. 单击完成,完成策略的创建。
十四、第三步:授权需要访问 DLC 内部存储的子账号
1. 在策略列表中找到刚才已创建的策略,并单击右侧的关联用户/组/角色。
2. 在弹窗中,勾选需要具备访问 DLC 内部托管存储权限的子账号,单击确定。
3. 完成授权操作,即可使用子账号的 SecretID 及 SecretKey,访问你名下 DLC 内部托管存储。