StarRocks集群搭建

StarRocks集群搭建

一、StarRocks简介

StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。用户无需经过复杂的预处理,就可以用 StarRocks 来支持多种数据分析场景的极速分析。

StarRocks 架构简洁,采用了全面向量化引擎,并配备全新设计的 CBO (Cost Based Optimizer) 优化器,查询速度(尤其是多表关联查询)远超同类产品

StarRocks 能很好地支持实时数据分析,并能实现对实时更新数据的高效查询。StarRocks 还支持现代化物化视图,进一步加速查询。

StarRocks 兼容 MySQL 协议,支持标准 SQL 语法,易于对接使用,全系统无外部依赖,高可用,易于运维管理。StarRocks 还兼容多种主流 BI 产品,包括 Tableau、Power BI、FineBI 和 Smartbi。

1.1 适用场景

StarRocks 可以满足企业级用户的多种分析需求,包括 OLAP (Online Analytical Processing) 多维分析、定制报表、实时数据分析和 Ad-hoc 数据分析等。

OLAP 多维分析

        利用 StarRocks 的 MPP 框架和向量化执行引擎,用户可以灵活的选择雪花模型,星型模型,宽表模型或者预聚合模型。适用于灵活配置的多维分析报表,业务场景包括:

  • 用户行为分析

  • 用户画像、标签分析、圈人

  • 高维业务指标报表

  • 自助式报表平台

  • 业务问题探查分析

  • 跨主题业务分析

  • 财务报表

  • 系统监控分析

实时数据仓库

        StarRocks 设计和实现了 Primary-Key 模型,能够实时更新数据并极速查询,可以秒级同步 TP (Transaction Processing) 数据库的变化,构建实时数仓,业务场景包括:

  • 电商大促数据分析

  • 物流行业的运单分析

  • 金融行业绩效分析、指标计算

  • 直播质量分析

  • 广告投放分析

  • 管理驾驶舱

  • 探针分析APM(Application Performance Management)

高并发查询

StarRocks 通过良好的数据分布特性,灵活的索引以及物化视图等特性,可以解决面向用户侧的分析场景,业务场景包括:

  • 广告主报表分析

  • 零售行业渠道人员分析

  • SaaS 行业面向用户分析报表

  • Dashboard 多页面分析

统一分析

  • 通过使用一套系统解决多维分析、高并发查询、预计算、实时分析查询等场景,降低系统复杂度和多技术栈开发与维护成本。

  • 使用 StarRocks 统一管理数据湖和数据仓库,将高并发和实时性要求很高的业务放在 StarRocks 中分析,也可以使用 External Catalog 和外部表进行数据湖上的分析。

二、虚拟机环境

2.1 汇总节点Ip

#/etc/hosts
192.168.10.3 starrock1
192.168.10.4 starrock2
192.168.10.5 starrock3

2.2 关闭防火墙

systemctl stop firewalld && systemctl disable firewalld

2.3 关闭交换区

#消除交换内存到虚拟内存时对性能的扰动
echo 0 | sudo tee /proc/sys/vm/swappiness

2.4 使用 Overcommit

echo 1 | sudo tee /proc/sys/vm/overcommit_memory

三、StarRocks部署

3.1 部署 FE 节点

  • 进入 StarRocks-x.x.x/fe 路径

    cd StarRocks-x.x.x/fe
  • 修改 FE 配置文件 conf/fe.conf

    # conf/fe.conf
    meta_dir = ${STARROCKS_HOME}/meta
    JAVA_HOME = ${JAVA_HOME}
    #priority_networks为该节点设定唯一 IP
    priority_networks=192.168.10.x
  • 创建FE元数据路径

    mkdir -p meta

3.2 部署 BE 节点

  • 进入 StarRocks-x.x.x/be 路径

    cd StarRocks-x.x.x/be
  • 修改 BE 配置文件conf/be.conf

    # conf/be.conf
    #priority_networks为该节点设定唯一 IP
    priority_networks=192.168.10.x
  • 创建数据路径

    mkdir -p storage

3.3 启动StarRocks集群

  • 启动FE节点(starrock1)

    #192.168.10.3 starrock1
    StarRocks-x.x.x/fe/bin/start_fe.sh --daemon

     

  • 通过 MySQL 客户端(或navicat)连接 StarRocks 以添加其他 FE 节点

    #连接starrock1
    mysql -h 192.168.10.3 -P9030 -uroot
    #使用 MySQL 客户端连接已有 FE 节点,添加新 FE 节点的信息,包括角色、IP 地址、以及 Port
    #添加 Follower FE 节点 ALTER SYSTEM ADD FOLLOWER "host:port";
    #添加 Observer FE 节点 ALTER SYSTEM ADD OBSERVER "host:port";
    #删除 Follower FE 节点 ALTER SYSTEM DROP FOLLOWER "host:port";
    #删除 Observer FE 节点 ALTER SYSTEM drop OBSERVER "host:port";
    ALTER SYSTEM ADD FOLLOWER "192.168.10.4:9010";
    ALTER SYSTEM ADD FOLLOWER "192.168.10.5:9010";

     

  • 启动其他FE节点

    #192.168.10.4 starrock2
    #192.168.10.5 starrock3
    StarRocks-x.x.x/fe/bin/start_fe.sh --helper 192.168.10.3:9010 --daemon

     

  • 通过 MySQL 客户端(或navicat)连接 StarRocks 以添加BE 节点

    #连接starrock1
    mysql -h 192.168.10.3 -P9030 -uroot
    #使用 MySQL 客户端连接已有 FE 节点,添加新 FE 节点的信息,包括角色、IP 地址、以及 Port
    #添加BE 节点 ALTER SYSTEM ADD BACKEND "host:port";
    #删除BE 节点 ALTER SYSTEM decommission BACKEND "host:port";
    ALTER SYSTEM ADD BACKEND "192.168.10.3:9050";
    ALTER SYSTEM ADD BACKEND "192.168.10.4:9050";
    ALTER SYSTEM ADD BACKEND "192.168.10.5:9050";
  • 启动BE节点

    #192.168.10.3 starrock1
    #192.168.10.4 starrock2
    #192.168.10.5 starrock3
    StarRocks-x.x.x/be/bin/start_be.sh --daemon
  • 查看状态

    进入http://192.168.10.3:8030/system?path=//frontends,如果Join、Alive都为true则表示集群状态正常9f1a291082234b599b16ccdfc6fb49d7.png

    进入http://192.168.10.3:8030/system?path=//backends,如果Alive都为true则表示集群状态正常 4a84d2f5cead4c299ff4d527f2a7e651.png

     

四、StarRocks部署常见错误

4.1 port xxx is used

        修改fe.conf中相应被占用端口为闲置端口,重启即可。

4.2 Could not initialize class org.apache.doris.rpc.BackendServiceProxy

        jdk环境错误,检查是否使用的是jre,如果使用的jre换成jdk即可,推荐使用oraclejdk版本1.8+。

4.3 current node is not added to the cluster, will exit

        非第一台启动的fe节点首次加入集群时需要在集群中add相应节点信息,使用MySQL客户端连接已有的FE, 添加新实例的信息,信息包括角色、ip、port。

ALTER SYSTEM ADD FOLLOWER "host:port";
ALTER SYSTEM ADD OBSERVER "host:port";

4.4 backend ip saved in master does not equal to backend local ip xxx vs 127.0.0.1

        检查机器是否多网卡多ip,需要在fe.conf中配置priority_networks为xxx,然后重启。

4.5 this replica exceeds max peimissible delta:5000ms

        服务器同步超时

#各个节点运行
sed -i 's/^\s*server/#server/g;s/#\s*allow/allow/g;s/#\s*local/local/g' /etc/chrony.conf && 
echo "server"$'\t'"ntp1.aliyun.com"$'\t'"iburst" >> /etc/chrony.conf && systemctl restart chronyd &&
systemctl enable chronyd &&timedatectl set-timezone Asia/Shanghai

4.6 Failed to get scan range, no queryable replica found in tablet: 11903

        定位磁盘不足,需要修改be.conf中的storage_root_path,可以指定多个目录,用;隔开。

五、导入示例

5.1 insert导入

create database testdb;
use testdb;
-- insert导入数据
-- 创建数据表
CREATE table  if not EXISTS test(
 `id` int  NOT NULL,
 `name` STRING null
)ENGINE=OLAP DISTRIBUTED BY HASH(`id`) BUCKETS 8;
​
insert into testdb.test VALUES(5,'周杰伦'),(4,'刘德华');
SELECT * from testdb.test ORDER BY id;

5.2 hive或者hdfs导入

-- hdfs导入数据
create table testdb.result2_fy
(
    id                     string ,
    firm_eid               string NULL,
    firm_id                string NULL,
    firm_name              string NULL,
    usc_code               string NULL,
    reg_no                 string NULL,
    org_code               string NULL,
    tax_no                 string NULL,
    firm_name_sh           string NULL,
    firm_name_en           string NULL,
    firm_category          string NULL,
    ope_status             string NULL,
    legal_rep              string NULL,
    legal_rep_id           string NULL,
    legal_rep_type         string NULL,
    legal_rep_category     string NULL,
    firm_type              string NULL,
    firm_type_code         string NULL,
    firm_org_type          string NULL,
    firm_properties        string NULL,
    est_date               string NULL,
    cancel_date            string NULL,
    cancel_reason          string NULL,
    rev_date               string NULL,
    rev_certificates       string NULL,
    reg_agency             string NULL,
    reg_agency_area_code   string NULL,
    usc_code_area_code     string NULL,
    ind_econ_code          string NULL,
    ind_econ_name          string NULL,
    appr_date              string NULL,
    emp_num                string NULL, 
    insured_emp_num        string NULL,
    ope_address            string NULL,
    reg_address            string NULL,
    ope_addr_code          string NULL,
    reg_addr_code          string NULL,
    open_date              string NULL,
    close_date             string NULL,
    ope_period             string NULL,
    province               string NULL,
    city                   string NULL,
    district               string NULL,
    bd_longitude           double NULL,
    bd_latitude            double NULL,
    gd_longitude           double NULL,
    gd_latitude            double NULL,
    reg_cap                double NULL,
    reg_cap_cur            string NULL,
    rec_cap                string NULL,
    ope_scope              string NULL,
    firm_scale             string NULL,
    parent_aame            string NULL,
    parent_type            string NULL,
    profile                string NULL,
    firm_name_used         string NULL,
    logo_url               string NULL,
    is_history             string NULL,
    accused_num            int NULL,
    accuser_num            int NULL,
    capitalsize            string NULL,
    executor_num_oneyear   int NULL,
    executor_num_twoyear   int NULL,
    executor_num_threeyear int NULL,
    docu_num_oneyear       int NULL,
    docu_num_twoyear       int NULL,
    docu_num_threeyear     int NULL,
    docu_amount_oneyear    double NULL,
    docu_amount_twoyear    double NULL,
    docu_amount_threeyear  double NULL,
    lian_num_oneyear       int NULL,
    lian_num_twoyear       int NULL,
    lian_num_threeyear     int NULL
)ENGINE=OLAP DISTRIBUTED BY HASH(`id`) BUCKETS 8;
LOAD LABEL testdb.test2
(
    -- 数据位置 hdfs://namenodeip:端口+路径
    DATA INFILE("hdfs://10.8.16.99:8020/user/hive/warehouse/team1_project.db/result2_fy/*")
    -- 表名
    INTO TABLE  result2_fy
    -- 列分隔符
    COLUMNS TERMINATED BY "•"
​
)
WITH BROKER
(
    -- 用户密码
    "username" = "root",
    "password" = "root"
)
PROPERTIES
(
    -- 超时时间
    "timeout" = "36000"
​
);

5.3 python导入

python导入数据

创表SQL

jsonpaths用法介绍 https://www.cnblogs.com/youring2/p/10942728.html

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`) BUCKETS 10;
​
 CREATE TABLE `table2`
(
    `id` int(11) NOT NULL COMMENT "城市 ID",
    `city` varchar(65533) NULL COMMENT "城市名称"
)
ENGINE=OLAP
PRIMARY KEY(`id`)
DISTRIBUTED BY HASH(`id`) BUCKETS 10;
Python代码

import requests,json
#验证密码
Session=requests.Session()
Session.auth=('root','')
#csv导入
table='table1'
headers_csv={
    'label':'123',
    #分隔符
    'column_separator':',',
    #字段
    'columns': 'id, name, score'
}
'''
1,Lily,23
2,Rose,23
3,Alice,24
4,Julia,25
'''
data=open('score.csv','r').read()
r=Session.put(f'http://10.8.16.200:8040/api/testdb/{table}/_stream_load',headers=headers_csv,data=data)
r.json()
#json导入
table='table2'
#请求头
headers_json={
    'Content-type': 'application/json',
    "Expect": "100-continue",
    'strict_mode': 'true',
    'format': 'json',
    'jsonpaths': '[\"$.name\", \"$.code\"]',
    'columns': 'city,tmp_id, id = tmp_id * 100'
}
for i in [{"name": "上海", "code": 1},{"name": "重庆", "code": 3}]:
    data=json.dumps(i)
    r=Session.put(f'http://10.8.16.200:8040/api/testdb/{table}/_stream_load',headers=headers_json,data=data)
    print(r.json())

 

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

awsless

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值