StarRocks 是什么
StarRocks 是新一代极速全场景 MPP 数据库, 充分吸收了关系型 OLAP 数据库和分布式存储系统在大数据时代的优秀研究成果,在业界实践的基础上,进一步改进优化、升级架构,并增添了众多全新功能,形成了全新的企业级产品。StarRocks 致力于构建极速统一分析体验,满足企业用户的多种数据分析场景,支持多种数据模型(明细模型、聚合模型、更新模型),多种导入方式(批量和实时),支持导入多达10000列的数据,可整合和接入多种现有系统(Spark、Flink、Hive、 ElasticSearch)。
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 外部访问
第一步:点击“开启外部访问托管存储”,开启后您同一腾讯云账号下的 EMR StarRocks 集群即可访问 DLC 内部托管存储。后续您在此通过点击开关,来开启或关闭 DLC 内部托管存储的外部访问服务。
开启外部访问的账号需要有 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的格式为用于访问兼容 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数据
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 内部存储的自定义策略
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 内部托管存储。