目录
StarRocks 是一款高性能分析型数据仓库,既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数据。StarRocks 兼容 MySQL 协议,可使用 MySQL 客户端和常用 BI 工具对接。广泛应用于实时数仓、OLAP 报表、数据湖分析等场景。
StarRocks核心只有 FE(Frontend)、BE(Backend)。FE 和 BE 模块都可以在线水平扩展,元数据和业务数据都有副本机制,确保整个系统无单点。StarRocks 使用列式存储,采用分区分桶机制进行数据管理。目前都是通过mysql客户端查询StarRocks中的数据。系统架构图如下

FE 是 StarRocks 的前端节点,负责管理元数据,管理客户端连接,进行查询规划,查询调度等工作。
BE 是 StarRocks 的后端节点,负责数据存储、SQL执行等工作。
wget https://download.starrocks.com/zh-CN/download/request-download/55/StarRocks-2.3.3.tar.gz
进入 StarRocks-x.x.x/fe 路径,修改FE配置文件conf/fe.conf
添加元数据目录配置项。
meta_dir = ${STARROCKS_HOME}/meta
添加 Java 目录配置项。
JAVA_HOME = ${JAVA_HOME}
在StarRocks-x.x.x/fe目录下面,创建元数据路径
mkdir -p meta
- ./bin/start_fe.sh --daemon
- ./bin/stop_fe.sh --daemon
通过查看日志log/fe.log和JPS命令查询java进程确认是否启动成功。
启动成功则可以在浏览器访问WEB UI ip:http_port(默认 http_port 为 8030),用户名为 root,密码为空。
可通过 MySQL 客户端连接 StarRocks 以添加 FE 节点。
在 FE 进程启动后,使用 MySQL 客户端连接 FE 实例。
mysql -h 127.0.0.1 -P9030 -uroot
说明 root 为 StarRocks 默认内置 user,密码为空,端口为 fe/conf/fe.conf 中的 query_port 配置项,默认值为 9030。
查看 FE 状态。
SHOW PROC '/frontends'\G
进入StarRocks-x.x.x/be目录,创建 BE 节点中的数据路径 storage。
mkdir -p storage
通过 MySQL 客户端将 BE 节点添加至 StarRocks 集群。
- //添加节点
- ALTER SYSTEM ADD BACKEND "host:port";//host 需要与 priority_networks 相匹配,port 需要与 be.conf 文件中的设置的 heartbeat_service_port 相同,默认为 9050。
- //删除节点
- ALTER SYSTEM decommission BACKEND "host:port";
- ./bin/start_be.sh --daemon
- ./bin/stop_be.sh --daemon
确认BE启动是否成功,在通过mysql客户端执行命令
SHOW PROC '/backends'\G
- #进入某个catalog
- set catalog xx_catalog;
- #使用某个库
- use databases;
- #查看某个表的数据
- #已经指定catalog和database之后可以直接查询
- select * from table limit 3
- #如果没有指定catalog
- select * from xx_catalog.xx_database.xx_table limit 3
-
-
- //查看表信息及存储介质等 表可以存储在机械磁盘也可以存储在ssd固态硬盘加速
- show partitions from table
- //查询某个分区数据
- select * from table partition (p1);
- //新增分区
- ALTER TABLE tbl_name
- ADD PARTITION p20240513
- VALUES [("2024-05-13"), ("2024-05-14"))
- //删除分区
- ALTER TABLE [<db_name>.]<tbl_name>
- DROP PARTITION [IF EXISTS] <partition_name>
例子参考:GRANT | StarRocks
- //给表授予权限
- GRANT ALL ON 库.表 TO user '用户'@'%';
建表时,通过设置合理的分区和分桶,使数据均衡分布在不同节点上,查询时能够有效裁剪数据扫描量,最大限度的利用集群的并发性能,从而提升查询性能。
StarRocks支持两层的数据划分。第一层是Partition分区,支持Range、List或者不分区(不分区代表全表只有一个分区)。第二层是 Bucket分桶(Tablet)
表,分区,分桶以及副本的关系
Table (逻辑描述) -- > Partition(分区:管理单元) --> Bucket(分桶:每个分桶就是一个数据分片:Tablet,数据划分的最小逻辑单元)

分区是逻辑概念,分桶是物理概念。每个分区partition内部会按照分桶键,采用哈希分桶算法将数据划分为多个桶bucket,每个桶的数据称之为一个数据分片tablet(实际的物理存储单元)。根据建表设置的副本数,计算有多少个副本在其他节点上(负载均衡)
- #创建分区表--动态分区
- #dynamic_partition.start=-2147483648表示不删除历史分区
- CREATE TABLE site_access(
- event_day DATE,
- site_id INT DEFAULT '10',
- city_code VARCHAR(100),
- user_name VARCHAR(32) DEFAULT '',
- pv BIGINT DEFAULT '0'
- )
- DUPLICATE KEY(event_day, site_id, city_code, user_name)
- PARTITION BY RANGE(event_day)(
- PARTITION p20200321 VALUES LESS THAN ("2020-03-22"),
- PARTITION p20200322 VALUES LESS THAN ("2020-03-23"),
- PARTITION p20200323 VALUES LESS THAN ("2020-03-24"),
- PARTITION p20200324 VALUES LESS THAN ("2020-03-25")
- )
- DISTRIBUTED BY HASH(event_day, site_id) BUCKETS 32
- PROPERTIES(
- "dynamic_partition.enable" = "true",
- "dynamic_partition.time_unit" = "DAY",
- "dynamic_partition.start" = "-3",
- "dynamic_partition.end" = "3",
- "dynamic_partition.prefix" = "p",
- "dynamic_partition.buckets" = "32",
- "dynamic_partition.history_partition_num" = "0"
- );
- #查看表当前的分区情况
- SHOW PARTITIONS FROM site_access
- #修改动态分区的属性
- ALTER TABLE site_access SET("dynamic_partition.enable"="false");
- #因使用的是dlf数据源,所以创建方式稍微有点不一样
- CREATE EXTERNAL CATALOG hive_catalog
- properties
- (
- "type" = "hive",
- "hive.metastore.type" = "DLF"
- );
有些是复杂的查询,所以增加这步骤,充分利用hive,spark等计算引擎资源
create table as select * from xx_table
insert into xx_database.xx_table(xx_cols) select * from hive_catalog.xx_database.xx_table
- CREATE EXTERNAL CATALOG xx_catalog
- PROPERTIES
- (
- "type"="jdbc",
- "user"="xx",
- "password"="xx",
- "jdbc_uri"="jdbc:mysql://ip:port",
- "driver_url"="https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar",
- "driver_class"="com.mysql.cj.jdbc.Driver"
- );
insert into xx_database.xx_table(xx_cols) select * from xx_catalog.xx_database.xx_table
查看be节点信息
show backends;
添加be节点
- #be_ip:在节点管理页面找到刚扩容的节点,使用对应内网IP地址。
- #be_heartbeat_service_port:和show backends;其他BE节点保持一致。
- ALTER SYSTEM ADD backend 'be_ip:heartbeat_service_port';
下线be节点
ALTER SYSTEM DECOMMISSION backend "be_ip:be_heartbeat_service_port";
如果Decommission很慢,您可以使用DROP方式强制下线BE
ALTER SYSTEM DROP backend "be_ip:be_heartbeat_service_port";
查看节点是否下线成功
show backends;
释放节点
去控制台释放已经下线的节点