简介
StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。StarRocks 既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数据。StarRocks 兼容 MySQL 协议,可使用 MySQL 客户端和常用 BI 工具对接。同时 StarRocks 具备水平扩展,高可用、高可靠、易运维等特性。广泛应用于实时数仓、OLAP 报表、数据湖分析等场景。
下载
文中使用版本为3.2.4,可通过官网自行下载
准备部署文件 | StarRocks
文章中使用的是存算一体架构,starrocks也支持存算分离架构
解压
tar -zxvf StarRocks-3.2.4.tar.gz
目录结构
启动 Leader FE 节点
创建元数据存储路径
mkdir -p /opt/starrocks/data/fe
修改 FE 配置文件
vim fe/conf/fe.conf
启动 FE 节点
./fe/bin/start_fe.sh --daemon
查看 FE 日志
cat fe/log/fe.log | grep thrift
如果日志打印以下内容,则说明该 FE 节点启动成功:
启动 BE 服务
创建数据存储路径
mkdir -p /opt/starrocks/data/be
修改 BE 配置文件 be/conf/be.conf
vim be/conf/be.conf
启动 BE 节点
./be/bin/start_be.sh --daemon
查看 BE 日志
cat be/log/be.INFO | grep heartbeat
如果日志打印以下内容,则说明该 BE 节点启动成功:
停止命令
停止 FE 节点。
./fe/bin/stop_fe.sh --daemon
停止 BE 节点。
./be/bin/stop_be.sh --daemon
添加BE节点至集群
通过工具连接,需要在服务器预装mysql客户端
mysql -h 192.168.x.xx -P 9030 -uroot
查看 Leader FE 节点状态
SHOW PROC '/frontends'\G
如果字段 Alive 为 true,说明该 FE 节点正常启动并加入集群。
如果字段 Role 为 FOLLOWER,说明该 FE 节点有资格被选为 Leader FE 节点。
如果字段 Role 为 LEADER,说明该 FE 节点为 Leader FE 节点。
添加 BE 节点至集群。
ALTER SYSTEM ADD BACKEND "192.168.x.xx:9050";
查看 BE 节点状态
SHOW PROC '/backends'\G
如果字段 Alive 为 true,说明该 BE 节点正常启动并加入集群。
这样就可以通过工具连接,跟连接mysql类似,这里使用的是navicat
测试语句
CREATE DATABASE example_db;
USE example_db;
-- 新建用户并授权
create user 'testuser'@'%' IDENTIFIED by '123456';
GRANT all ON databasename.* TO 'testuser'@'%';
-- 仅包含一个 BE,所以需要加PROPERTIES( "replication_num" = "1" )
CREATE TABLE user_access (
uid int,
name varchar(64),
age int,
phone varchar(16),
last_access datetime,
credits double
)
PROPERTIES( "replication_num" = "1" );
CREATE TABLE orders1 (
order_id bigint NOT NULL,
dt date NOT NULL,
user_id INT NOT NULL,
good_id INT NOT NULL,
cnt int NOT NULL,
revenue int NOT NULL
)
PRIMARY KEY (order_id)
DISTRIBUTED BY HASH (order_id)
PROPERTIES( "replication_num" = "1" )
;
CREATE TABLE orders2 (
order_id bigint NOT NULL,
dt date NOT NULL,
merchant_id int NOT NULL,
user_id int NOT NULL,
good_id int NOT NULL,
good_name string NOT NULL,
price int NOT NULL,
cnt int NOT NULL,
revenue int NOT NULL,
state tinyint NOT NULL
)
PRIMARY KEY (order_id,dt,merchant_id)
PARTITION BY date_trunc('day', dt)
DISTRIBUTED BY HASH (merchant_id)
ORDER BY (dt,merchant_id)
PROPERTIES (
"enable_persistent_index" = "true",
"replication_num" = "1"
);
CREATE TABLE detail (
event_time DATETIME NOT NULL COMMENT "datetime of event",
event_type INT NOT NULL COMMENT "type of event",
user_id INT COMMENT "id of user",
device_code INT COMMENT "device code",
channel INT COMMENT "")
ORDER BY (event_time, event_type)
PROPERTIES( "replication_num" = "1" );
CREATE TABLE aggregate_tbl (
site_id LARGEINT NOT NULL COMMENT "id of site",
date DATE NOT NULL COMMENT "time of event",
city_code VARCHAR(20) COMMENT "city_code of user",
pv BIGINT SUM DEFAULT "0" COMMENT "total page views"
)
AGGREGATE KEY(site_id, date, city_code)
DISTRIBUTED BY HASH(site_id)
PROPERTIES( "replication_num" = "1" );
CREATE TABLE orders4 (
create_time DATE NOT NULL COMMENT "create time of an order",
order_id BIGINT NOT NULL COMMENT "id of an order",
order_state INT COMMENT "state of an order",
total_price BIGINT COMMENT "price of an order"
)
UNIQUE KEY(create_time, order_id)
DISTRIBUTED BY HASH(order_id);
PROPERTIES( "replication_num" = "1" );
DESCRIBE user_access;
SHOW CREATE TABLE user_access;
-- 从本地文件导入数据
CREATE TABLE `table1`
(
`id` int(11) NOT NULL COMMENT "用户 ID",
`name` varchar(65533) NULL COMMENT "用户姓名",
`score` int(11) NOT NULL COMMENT "用户得分"
)
ENGINE=OLAP
PRIMARY KEY(`id`)
DISTRIBUTED BY HASH(`id`)
PROPERTIES( "replication_num" = "1" );
-- 查看 FE 节点的 IP 地址和 HTTP 端口号。
SHOW FRONTENDS;
-- 导入作业
curl --location-trusted -u root: -H "label:123" -H "Expect:100-continue" -H "column_separator:," -H "columns: id, name, score" -T D:\\data\\test.csv -XPUT http://192.168.5.66:8030/api/example_db/table1/_stream_load
select * from table1;