本文为您介绍如何创建和管理 E-MapReduce(EMR)StarRocks 集群,以及查询分析位于 StarRocks 中的数据。
创建集群分为四步,软件设置-->硬件设置-->其他设置-->预览确认。
在 EMR 控制台点击创建集群,选择交互式查询 > StarRocks,根据您的需要选择对应的版本。
配置项说明:
配置项 | 说明 |
---|---|
产品版本 | 推荐选择使用最新的版本,关于各产品版本之间的区别可点击 EMR on ECS功能发布记录查看各版本的发布记录。 |
服务高可用 | 默认开启,开启后会部署 3 个 FE 节点和至少 3 个 BE 节点,从而提升集群的服务能力和容错性,避免单点故障。生产集群建议开启高可用选项。 |
可选服务 | 目前提供了 StarRocks 2.x 和 3.x 版本可供选择,如果您是新业务,或没有版本迁移负担,则推荐使用 3.x 版本。 |
自定义配置 | StarRocks 3.x 版本开始支持存算分离部署模式。 |
在硬件设置一栏选择付费类型、配置可用区、网络和 ECS 实例。
配置项说明:
配置项 | 说明 |
---|---|
付费类型 | 支持按量付费和包年包月两种计费模式:
|
可用区 | 在同一地域内,电力和网络互相独立的物理区域。在同一地域内,不同可用区之间内网互通,可用区之间可以做到故障隔离。 |
网络配置 | 配置 StarRocks 的集群网络:
|
实例设置 | 实例节点组分为 Master 和 Core,通常情况下 StarRocks 会在 Master 节点组上部署 FE 节点,在 Core 节点组上部署 BE 节点,您需要根据业务需求和数据增长合理规划节点规格、BE 节点数量,以及磁盘空间。 |
在其他设置一栏设置集群名称、访问凭证等其他信息。
配置项说明:
配置项 | 说明 |
---|---|
集群名称 | 集群的名字,长度限制为1~64个字符,仅可使用中文、字母、数字、短划线(-)和下划线(_)。 |
访问凭证 | 该凭证用于远程登陆集群 master 节点的 ECS 机器,您可选择密钥对或密码方式登录。 |
集群脚本 | 用于配置在集群启动时执行引导操作的脚本,可以引导操作自定义集群环境,例如在 EMR 集群中部署安装第三方组件等。 |
集群角色 | 为集群绑定 IAM 角色,从而为 EMR 集群上的 ECS 提供调用访问 TOS 的资源权限。 |
标签 | 标签由区分大小写的键值对组成,用于对本次创建集群的全部实例和云盘进行打标。 |
集群所属项目 | 将新建的集群分配至某个项目中,可以选择已有的项目,也可以新建项目。 |
在预览确认一栏会显示本次集群的配置单信息,您在确认集群配置信息无误,并查看勾选EMR 服务条款后,可以点击立即创建按钮开始创建 StarRocks 集群。创建集群是一个异步的过程,整个过程大概会持续几分钟时间,您可以在 EMR 控制台查看集群的创建进度。
说明
可以进一步访问 创建集群概述,以了解创建集群相关各配置项的详细说明。
StarRocks 兼容 MySQL 协议,您可以直接通过 MySQL 客户端按照如下格式连接 StarRocks 服务:
mysql -h {fe_node_ip} -P {fe_query_port} -u {username} -p;
参数说明:
fe_node_ip
:StarRocks 任意 FE 节点 IP,可以是内网 IP 或公网 IP,您可以在 EMR 控制台集群详情页通过访问“节点管理 - MasterGroup”获取,同时需要保证与该 IP 的连通性。fe_query_port
:StarRocks MySQL Server 端口,您可以在 EMR 控制台通过集群详情页通过访问“服务列表 - StarRocks - 服务参数”中的 query_port
配置项获取,默认为 9030。首次连接可以直接使用 root 账户无密码登录,示例:
# 首次连接无需输入密码 $ mysql -h 127.0.0.1 -P 9030 -u root -p;
在连接成功并进入 MySQL 交互终端后,强烈建议您通过 SET PASSWORD 命令为 root 账户设置密码,示例:
SET PASSWORD FOR 'root'@'%' = PASSWORD('******');
为了保证数据安全性,强烈建议您为 root
账户设置复杂度较高的密码,并妥善保管。密码设置成功后,您需要退出终端重新连接 StarRocks 集群。
除了使用 MySQL 客户端,您还可以使用其他任何支持 MySQL 协议的可视化工具连接访问 StarRocks 服务。
对于具备 user_admin
管理员权限的用户(例如 root
用户),可以对集群的用户和权限进行更加细粒度的管理,以保证数据的安全性。
您可以通过如下 SQL 语法创建用户:
CREATE USER -- 用户标识,由用户名和登录 IP 组成,例如 zhangsan@'127.0.0.1' {user_identity} -- 用户认证方式,支持原生密码、mysql_native_password 和 LDAP 三种认证方式 [auth_option] -- 为用户绑定权限角色,从而授予相应的操作权限 [DEFAULT ROLE {role_name}[, {role_name}, ...]]
示例:
mysql> CREATE USER username@'%' IDENTIFIED BY '***' DEFAULT ROLE db_admin, user_admin;
您可以通过 SHOW USERS
查看当前集群中所有的用户,示例:
mysql> SHOW USERS; +-------------------------+ | User | +-------------------------+ | 'root'@'%' | | 'username'@'%' | | 'emr'@'127.0.0.1' | +-------------------------+
您可以通过如下 SQL 语法修改指定用户的信息,例如用户密码、认证方式,以及权限角色等:
ALTER USER -- 用户标识,由用户名和登录 IP 组成,例如 zhangsan@'127.0.0.1' user_identity -- 用户认证方式,支持原生密码、mysql_native_password 和 LDAP 三种认证方式 [auth_option] -- 为用户绑定权限角色,从而授予相应的操作权限 [default_role]
如下示例演示了修改指定用户的密码信息:
mysql> ALTER USER 'username'@'%' IDENTIFIED BY '***';
您可以通过 DROP USER
删除指定的用户,示例:
mysql> DROP USER 'username'@'%';
StarRocks 内置提供了一套基于 RBAC 的权限管理策略,您可以通过执行 SHOW ROLES
查看集群已有的权限角色。
通过 GRANT 操作给用户关联某个角色可以实现将角色对应的权限授予给用户,例如给用户关联 db_admin
角色:
mysql> GRANT db_admin TO USER 'username'@'%';
您也可以绕过角色,直接给用户赋予具体权限。如下示例演示了直接给用户赋予 tb_primary_key 表的 SELECT 权限:
mysql> GRANT SELECT ON TABLE tb_primary_key TO USER 'username'@'%' WITH GRANT OPTION;
您可以通过 SHOW GRANTS
查看当前用户或指定用户的权限授予情况:
mysql> SHOW GRANTS FOR 'username'@'%' \G; *************************** 1. row *************************** UserIdentity: 'username'@'%' Catalog: NULL Grants: GRANT 'db_admin' TO 'username'@'%' *************************** 2. row *************************** UserIdentity: 'username'@'%' Catalog: default_catalog Grants: GRANT SELECT ON TABLE examples.tb_primary_key TO USER 'username'@'%' WITH GRANT OPTION
您可以通过 REVOKE
操作撤销指定用户或角色的权限。例如撤销用户对于表 tb_primary_key 的 SELECT 权限:
mysql> REVOKE SELECT ON TABLE tb_primary_key FROM USER 'username'@'%';
通过 MySQL 协议连接到 StarRocks 服务后,您可以通过 SQL 语句实现对于数据库和数据表的查看和管理操作。
您可以通过如下 SQL 语法操作创建数据库:
CREATE DATABASE [IF NOT EXISTS] {db_name}
参数 db_name
表示数据库名称,命名规则可以参考 StarRocks 官方说明文档。如下示例演示创建一个名为 examples 的数据库:
mysql> CREATE DATABASE IF NOT EXISTS examples;
您可以通过如下 SQL 语法查看指定 Catalog 下已创建的数据库:
SHOW DATABASES [FROM {catalog_name}]
参数 catalog_name
表示 Catalog 名称,如果不指定则默认为 default_catalog
。如下示例演示查看位于 default_catalog
中的数据库:
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | _statistics_ | | examples | | information_schema | | sys | +--------------------+
您也可以通过如下 SQL 语法查看指定数据库的创建语句:
SHOW CREATE DATABASE {db_name}
示例:
mysql> SHOW CREATE DATABASE examples; +----------+----------------------------+ | Database | Create Database | +----------+----------------------------+ | examples | CREATE DATABASE `examples` | +----------+----------------------------+
您可以通过如下 SQL 语法实现对于数据库的重命名、Quota 设置:
-- 重命名数据库 ALTER DATABASE {db_name} RENAME {new_db_name} -- 设置数据库数据量 Quota,单位为 B/K/KB/M/MB/G/GB/T/TB/P/PB ALTER DATABASE {db_name} SET DATA QUOTA {quota} -- 设置数据库副本数量 Quota ALTER DATABASE {db_name} SET REPLICA QUOTA {quota}
如下示例演示了将数据库 examples 重命名为 demo:
mysql> ALTER DATABASE examples RENAME demo;
您可以通过如下 SQL 语法实现删除指定数据库:
DROP DATABASE [IF EXISTS] {db_name} [FORCE]
示例:
mysql> DROP DATABASE demo;
说明
您可以通过 CREATE TABLE
语句在指定数据库下创建数据表,典型的 SQL 语法如下:
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [{database_name}.]{table_name} ( -- 列定义 column_definition1[, column_definition2, ...] -- 索引定义 [index_definition1[, index_definition2, ...]] ) -- 引擎定义,默认为 OLAP,表示内部表,还支持外部表,包括 mysql、elasticsearch、hive、jdbc、hudi、iceberg... [ENGINE = OLAP] -- 定义数据模型和排序键,默认为明细模型 [key_desc] -- 定义表的描述信息 [COMMENT '这里是表的描述信息'] -- 定义表的分区方式,支持表达式分区、Range 分区和 List 分区 [partition_desc] -- 定义数据分桶方式,支持随机分桶和哈希分桶 [distribution_desc] -- 对于主键模型,可以通过 ORDER BY 独立设置排序键 [ORDER BY (column_definition1,...)] -- 设置表的属性配置,例如副本数 [PROPERTIES ("key"="value", ...)]
您可以访问 StarRocks 官方说明文档 了解各个参数的详细说明。如下示例演示了在 examples 数据库下创建名为 tb_primary_key 的主键表:
mysql> USE examples; Database changed mysql> CREATE TABLE IF NOT EXISTS tb_primary_key -> ( -> user_id BIGINT NOT NULL COMMENT 'user id', -> name VARCHAR(32) NOT NULL COMMENT 'user name', -> age TINYINT NOT NULL COMMENT 'user age', -> sex TINYINT NOT NULL COMMENT 'user sex', -> email VARCHAR(256) NULL COMMENT 'email' -> ) ENGINE = OLAP PRIMARY KEY (user_id) -> DISTRIBUTED BY HASH(user_id) -> ORDER BY(`name`) -> PROPERTIES ( -> 'replication_num' = '3' -> );
您也可以通过 CREATE TABLE AS SELECT 语法查询原表,并基于查询结果创建新表;通过 CREATE TABLE LIKE 语法基于已有的表结构创建新表。
您可以通过如下 SQL 语法查看位于指定数据库下的数据表:
SHOW TABLES [FROM {catalog_name}.{db_name}]
其中参数 catalog_name
表示 Catalog 名称,如果不指定则默认为 default_catalog
;参数 db_name
表述数据库名称,如果不指定则默认为当前数据库。示例:
mysql> SHOW TABLES; +--------------------+ | Tables_in_examples | +--------------------+ | tb_primary_key | +--------------------+
您也可以通过如下 SQL 语法查看指定数据表的创建语句:
SHOW CREATE TABLE [{db_name}.]{table_name}
示例:
mysql> SHOW CREATE TABLE tb_primary_key \G; *************************** 1. row *************************** Table: tb_primary_key Create Table: CREATE TABLE `tb_primary_key` ( `user_id` bigint(20) NOT NULL COMMENT "user id", `name` varchar(32) NOT NULL COMMENT "user name", `age` tinyint(4) NOT NULL COMMENT "user age", `sex` tinyint(4) NOT NULL COMMENT "user sex", `email` varchar(256) NULL COMMENT "email" ) ENGINE=OLAP PRIMARY KEY(`user_id`) DISTRIBUTED BY HASH(`user_id`) ORDER BY(`name`) PROPERTIES ( "replication_num" = "3", "in_memory" = "false", "enable_persistent_index" = "true", "replicated_storage" = "true", "compression" = "LZ4" );
您可以通过如下 SQL 语法对指定的数据表进行修改:
ALTER TABLE [{db_name}.]{tbl_name} alter_clause1[, alter_clause2, ...]
其中 alter_clause 表示具体的修改操作,目前支持的操作如下表所示:
操作类型 | 说明 |
---|---|
RENAME | 修改表名、rollup index 名称,以及 partition 名称,不支持修改列名。 |
COMMENT | 修改表的注释信息。 |
PARTITION | 修改表的分区属性、删除分区,或增加分区。 |
BUCKET | 修改表的分桶方式和分桶数量。 |
COLUMN | 增加列、删除列、调整列顺序,以及修改列类型。 |
ROLLUP INDEX | 创建或删除 rollup index。 |
BITMAP INDEX | 修改 bitmap index。 |
SWAP | 原子替换两张表。 |
COMPACTION | 对指定表或分区手动执行数据版本合并操作。 |
如下示例演示了修改数据表的注释信息:
mysql> ALTER TABLE tb_primary_key COMMENT='这里是新的描述信息';
您可以通过 SHOW ALTER TABLE 查看 ALTER 任务的执行情况。
您可以通过如下 SQL 语法操作删除指定的数据表:
DROP TABLE [IF EXISTS] [{db_name}.]{table_name} [FORCE]
示例:
mysql> DROP TABLE tb_primary_key;
说明:
RECOVER
语句恢复被删除的数据表。通过 MySQL 协议连接到 StarRocks 服务后,您可以通过 SQL 语句实现对于 StarRocks 中数据的查询、更新,以及删除操作。
您可以通过 INSERT 语句向指定数据表中插入数据,典型的 SQL 语法如下:
INSERT { INTO | OVERWRITE } [{db_name}.]{table_name} -- 指定插入分区 [ PARTITION ({partition_name} [, ...] ) ] -- 插入的数据值 { VALUES ( { {expression} | DEFAULT } [, ...] ) | {query} }
示例:
mysql> INSERT INTO tb_primary_key -> VALUES (10001, 'aaaa', 26, 1, 'aaaa@starrocks.com'), -> (10002, 'bbbb', 17, 0, 'bbbb@starrocks.com'), -> (10001, 'aaaa', 27, 1, 'aaaa@starrocks.com'), -> (10001, 'aaaa', 28, 1, 'aaaa@starrocks.com'); {'label':'insert_42bd9455-dd1b-11ee-9417-00163e11548e', 'status':'VISIBLE', 'txnId':'2'}
您可以通过 SELECT 语句查询指定数据表中的数据,典型的 SQL 语法如下:
SELECT ... FROM ... [ ... ] GROUP BY [ , ... | GROUPING SETS [, ...] ( groupSet [ , groupSet [ , ... ] ] ) | ROLLUP(expr [ , expr [ , ... ] ]) | CUBE(expr [ , expr [ , ... ] ]) ] [ ... ]
示例:
mysql> SELECT * FROM tb_primary_key; +---------+------+------+------+--------------------+ | user_id | name | age | sex | email | +---------+------+------+------+--------------------+ | 10002 | bbbb | 17 | 0 | bbbb@starrocks.com | | 10001 | aaaa | 28 | 1 | aaaa@starrocks.com | +---------+------+------+------+--------------------+
您可以通过 DELETE 语句删除指定数据表中满足条件的数据,典型的 SQL 语法如下:
DELETE FROM [{db_name}.]{table_name} [PARTITION {partition_name}] WHERE -- 设置删除过滤条件,可以指定一个或多个列,在同时满足条件时实施删除操作 column_name1 op { value | value_list } [ AND column_name2 op { value | value_list } ...]
示例:
mysql> DELETE FROM tb_primary_key WHERE user_id = 10001; {'label':'delete_3f0f15e5-dd1c-11ee-9417-00163e11548e', 'status':'VISIBLE', 'txnId':'4'}