文档中心>数据湖计算 DLC>实践教程>StarRocks 直接查询 DLC 内部存储

StarRocks 直接查询 DLC 内部存储

最近更新时间:2024-07-10 09:18:31

我的收藏


StarRocks 是什么

StarRocks 是新一代极速全场景 MPP 数据库, 充分吸收了关系型 OLAP 数据库和分布式存储系统在大数据时代的优秀研究成果,在业界实践的基础上,进一步改进优化、升级架构,并增添了众多全新功能,形成了全新的企业级产品。StarRocks 致力于构建极速统一分析体验,满足企业用户的多种数据分析场景,支持多种数据模型(明细模型、聚合模型、更新模型),多种导入方式(批量和实时),支持导入多达10000列的数据,可整合和接入多种现有系统(Spark、Flink、Hive、 ElasticSearch)。
在腾讯云弹性 MapReduce 产品中,我们提供了完全开箱即用的 StarRocks 服务,详细可参考 StarRocks简介


StarRocks+DLC 湖仓一体查询加速

腾讯云数据湖 DLC 支持基于 EMR StarRocks 的湖仓一体查询加速模式,无需将 DLC 数据导入 StarRocks 或在 StarRocks 创建 DLC 外部表即可无缝分析 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 | StarRocks

语法

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的格式为用于访问兼容 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" = "AKIDEH5iCawJfjmlfIrIf1EE**********", "aws.s3.secret_key" = "RgkdMrGZhZDhy3ymU6VfbN**********"
)

您如需要通过 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" = "AKIDEH5iCawJfjmlfIrIf1EELH6lDakrlT2a*****", "aws.s3.secret_key" = "RgkdMrGZhZDhy3ymU6VfbN3UhfOvEYjk*****" )


查询DLC数据

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 内部托管存储。