You need to enable JavaScript to run this app.
导航
快速开始
最近更新时间:2024.12.09 16:33:31首次发布时间:2023.01.04 10:47:03

本文为您介绍如何创建和管理 E-MapReduce(EMR)StarRocks 集群,以及查询分析位于 StarRocks 中的数据。

创建集群

创建集群分为四步,软件设置-->硬件设置-->其他设置-->预览确认。

  1. 登录 EMR 控制台
  2. 在顶部菜单栏中,根据实际场景,下拉选择地域和项目空间:
  • 地域:创建的集群及相应资源均会部署在对应地域内,不可修改。
  • 项目空间:系统已自动创建 default 的默认项目,您可通过下方路径,新建属于您的项目空间:
    • 通过界面右上角用户 > 访问控制 > 资源管理 > 项目,进入项目界面。
    • 单击新建项目按钮,输入项目名、显示名称、备注等信息,完成新建项目。
      详见项目配置
  1. 在 EMR 控制台点击创建集群,选择交互式查询 > StarRocks,根据您的需要选择对应的版本。
    Image
    配置项说明:

    配置项

    说明

    产品版本

    推荐选择使用最新的版本,关于各产品版本之间的区别可点击 EMR on ECS功能发布记录查看各版本的发布记录。

    服务高可用

    默认开启,开启后会部署 3 个 FE 节点和至少 3 个 BE 节点,从而提升集群的服务能力和容错性,避免单点故障。生产集群建议开启高可用选项。

    可选服务

    目前提供了 StarRocks 2.x 和 3.x 版本可供选择,如果您是新业务,或没有版本迁移负担,则推荐使用 3.x 版本。

    自定义配置

    StarRocks 3.x 版本开始支持存算分离部署模式。

  2. 硬件设置一栏选择付费类型、配置可用区、网络和 ECS 实例。
    Image
    配置项说明:

    配置项

    说明

    付费类型

    支持按量付费和包年包月两种计费模式:

    • 按量付费:按实际开通时长以小时为单位进行收费,即后付费模式,节点可以随时释放。
    • 包年包月:按月购买及续费,即预付费模式,节点到期之后才可以释放。

    可用区

    在同一地域内,电力和网络互相独立的物理区域。在同一地域内,不同可用区之间内网互通,可用区之间可以做到故障隔离。

    网络配置

    配置 StarRocks 的集群网络:

    • 选择项目:VPC 隶属于具体项目,如果 VPC 选项栏中没有您想要的 VPC,可以尝试更换项目,或者选择“全部项目”。
    • VPC:集群私有网络,同一个 VPC 内能够保证内网互通,建议 EMR 上下游系统部署在同一个私有网络中。例如,StarRocks下游 BI 工具等需要访问 StarRocks FE 服务,需要保证 BI 工具所在集群与 StarRocks 集群在同一个 VPC 内。
    • 子网:子网用于为实例分配主网卡的私网IP地址,通过网卡可实现实例的网络管理。
    • 安全组:选择配置的安全组规则,以控制安全组内 ECS 的出入流量。

    实例设置

    实例节点组分为 Master 和 Core,通常情况下 StarRocks 会在 Master 节点组上部署 FE 节点,在 Core 节点组上部署 BE 节点,您需要根据业务需求和数据增长合理规划节点规格、BE 节点数量,以及磁盘空间。
    虽然在实例设置时可以关闭 Core 节点组,从而将 FE 和 BE 都部署在 Master 节点上,但生产集群强烈建议将 BE 部署在 Core 节点上,从而获得更好的性能和集群稳定性,也能够更好的支持对集群进行扩缩容以应对后续业务的增长。

  3. 其他设置一栏设置集群名称、访问凭证等其他信息。
    Image
    配置项说明:

    配置项

    说明

    集群名称

    集群的名字,长度限制为1~64个字符,仅可使用中文、字母、数字、短划线(-)和下划线(_)。

    访问凭证

    该凭证用于远程登陆集群 master 节点的 ECS 机器,您可选择密钥对或密码方式登录。

    • 密钥对:下拉选择已创建成功的密钥对,或单击 创建密钥对 前往控制台创建。
    • 密码:输入集群 Master 节点登录密码,密码格式要求可以参考 其他设置

    集群脚本

    用于配置在集群启动时执行引导操作的脚本,可以引导操作自定义集群环境,例如在 EMR 集群中部署安装第三方组件等。

    集群角色

    为集群绑定 IAM 角色,从而为 EMR 集群上的 ECS 提供调用访问 TOS 的资源权限。

    标签

    标签由区分大小写的键值对组成,用于对本次创建集群的全部实例和云盘进行打标。

    集群所属项目

    将新建的集群分配至某个项目中,可以选择已有的项目,也可以新建项目。

  4. 预览确认一栏会显示本次集群的配置单信息,您在确认集群配置信息无误,并查看勾选EMR 服务条款后,可以点击立即创建按钮开始创建 StarRocks 集群。创建集群是一个异步的过程,整个过程大概会持续几分钟时间,您可以在 EMR 控制台查看集群的创建进度。

说明

可以进一步访问 创建集群概述,以了解创建集群相关各配置项的详细说明。

连接 StarRocks

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;

说明

  • 执行 DROP DATABASE 后,默认 1 天内可以通过 RECOVER 语句恢复被删除的数据库,但是该数据库下已经随数据库删除的 Pipe 导入作业无法恢复。
  • 如果执行 DROP DATABASE FORCE,则系统不会检查该数据库是否存在未完成的事务,数据库将直接被删除并且不能被恢复,一般不建议执行此操作。

数据表管理

创建数据表

您可以通过 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;

说明:

  • 执行 DROP TABLE 后,默认 1 天内可以通过 RECOVER 语句恢复被删除的数据表。
  • 如果执行 DROP TABLE FORCE,则系统不会检查该表是否存在未完成的事务,数据表将直接被删除并且不能被恢复,一般不建议执行此操作。

数据查询

通过 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'}