数据库
首页 > 数据库> > 国产开源优秀新一代MPP数据库StarRocks入门之旅-数仓新利器(上)

国产开源优秀新一代MPP数据库StarRocks入门之旅-数仓新利器(上)

作者:互联网

概述

背景

Apache Doris官方地址 https://doris.apache.org/

Apache Doris GitHub源码地址 https://github.com/apache/incubator-doris

  • Apache Doris是一个现代化的MPP分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。Apache Doris的分布式架构非常简洁,易于运维,并且可以支持10PB以上的超大数据集。
  • Apache Doris可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。令您的数据分析工作更加简单高效!

定义

StarRocks官网地址 https://www.starrocks.com/zh-CN/index 目前最新版本为2.2.0

StarRocks官网文档地址 https://docs.starrocks.com/zh-cn/main/introduction/StarRocks_intro

StarRocks GitHub源码地址 https://github.com/StarRocks/starrocks

发布路线

这个是StarRocks2021年前规划,现在最新版本已为2.2.0

image-20220511105637566

特性

使用场景

StarRocks可以满足企业级用户的多种分析需求,包括OLAP多维分析、定制报表、实时数据分析和Ad-hoc数据分析等。具体的业务场景包括:

与其他分析层数仓框架对比,其极速统一架构如下

image-20220511105820817

与Flink生态对接

image-20220511110217211

基本概念和架构

系统架构图

image-20220510135840327

组件介绍

StarRocks 集群由 FE 和 BE 构成, 可以使用 MySQL 客户端访问 StarRocks 集群。

FrontEnd

简称 FE,是 StarRocks 的前端节点,负责管理元数据,管理客户端连接,进行查询规划,查询调度等工作。FE 接收 MySQL 客户端的连接, 解析并执行 SQL 语句。

BackEnd

简称 BE,是 StarRocks 的后端节点,负责数据存储,计算执行,以及 compaction,副本管理等工作。

其他组件

Broker

Broker 是 StarRocks 和 HDFS 对象存储等外部数据对接的中转服务,辅助提供导入导出功能,如需使用 broker load,spark load,备份恢复等功能需要安装启动 Broker。

StarRocksManager

StarRocksManager 是 StarRocks 企业版提供的管理工具,通过 Manager 可以可视化的进行 StarRocks 集群管理、在线查询、故障查询、监控报警、可视化慢查询分析等功能。

手动部署

环境支持

集群节点需要以下环境支持:

通过 cat /proc/cpuinfo |grep avx2 命令查看节点配置,有结果则 cpu 支持 AVX2 指令集。

image-20220510164948879

测试集群建议节点配置:BE 推荐 16 核 64GB 以上,FE 推荐 8 核 16GB 以上。建议 FE,BE 独立部署。

系统参数配置建议:

关闭交换区,消除交换内存到虚拟内存时对性能的扰动。

echo 0 | sudo tee /proc/sys/vm/swappiness

建议使用 Overcommit,把 cat /proc/sys/vm/overcommit_memory 设成 1。

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

部署

部署规划

服务器IP 服务器角色
192.168.5.52 FE、BE、Broker
192.168.5.53 BE、Broker
192.168.12.28 BE、Broker

下载

# 从官网下载
wget https://www.starrocks.com/zh-CN/download/request-download/22/StarRocks-2.2.0-rc01.tar.gz
# 下载的安装包可直接解压后进行安装部署
tar -xvf StarRocks-2.2.0-rc02.tar.gz

image-20220510153631772

查看FE目录结构

image-20220510155814332
查看BE目录结构

image-20220510155533349

部署FE

cd StarRocks-2.2.0-rc02/fe
# 第一步: 配置文件 conf/fe.conf
vi conf/fe.conf
# 元数据目录
meta_dir = ${STARROCKS_HOME}/meta
# JVM配置
JAVA_OPTS = "-Xmx8192m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$STARROCKS_HOME/log/fe.gc.log"
# 由于我本机有很多网卡,通信网段为192.168.0.0,因此配置如下
priority_networks = 10.10.10.0/24;192.168.0.0/16

可以根据 FE 内存大小调整-Xmx8192m,为了避免 GC 建议 16G 以上,StarRocks 的元数据都在内存中保存。

# 第二步: 创建元数据目录,需要与 fe.conf 中配置路径保持一致:
mkdir -p meta 
# 第三步: 启动 FE 进程:
bin/start_fe.sh --daemon
# 第四步: 确认启动 FE 启动成功。

image-20220510161203780

访问 StarRocks 的 WebUI,http://192.168.5.52:8030

image-20220510160925923
使用 MySQL 客户端访问 FE,这里默认 root 用户密码为空,端口为 fe/conf/fe.conf 中的 query_port 配置项,默认为 9030,查看 FE 状态是正常

image-20220510161111823

通过SQLyog的第三方MySQL客户端连接和查询结果

image-20220510163516143

部署BE

BE 的基本配置:BE 的配置文件为 be/conf/be.conf,默认配置即可启动集群,生产环境可参考 BE 参数配置对集群进行详细优化配置。

BE 部署:通过以下命令启动 be 并添加 be 到 StarRocks 集群, 一般至少在三个节点部署 3 个 BE 实例, 每个实例的添加步骤相同。

# 进入be的安装目录
cd StarRocks-2.2.0-rc02/be
# 第一步: 创建数据目录(当前设置为 be.conf 中默认 storage_root_path 配置项路径):
# 创建数据存储目录
mkdir -p storage
# 第二步: 通过 mysql 客户端添加 BE 节点:host 为与 priority_networks 设置相匹配的 IP,port 为 BE 配置文件中的 heartbeat_service_port,默认为 9050。
mysql> ALTER SYSTEM ADD BACKEND "192.168.5.52:9050";

如出现错误,需要删除 BE 节点,可通过以下命令将 BE 节点从集群移除,host 和 port 与添加时一致:具体参考 扩容缩容

mysql> ALTER SYSTEM decommission BACKEND "host:port";
# 第三步: 启动 BE:
bin/start_be.sh --daemon
# 第四步: 查看 BE 状态, 确认 BE 就绪:

image-20220510161613480

显示isAlive 为 true,则说明 BE 正常接入集群。如果 BE 没有正常接入集群,请查看 log 目录下的 be.WARNING 日志文件确定原因。

如果日志中出现类似"backend ip saved in master does not equal to backend local ip127.0.0.1 vs. 192.168.5.22"的信息,说明 priority_networks 的配置存在问题。此时需要,先用以下命令 drop 掉原来加进去的 be,然后重新以正确的 IP 添加 BE。

mysql> ALTER SYSTEM DROPP BACKEND "192.168.5.22:9050";

由于是初次启动,如果在操作过程中遇到任何意外问题,都可以删除并重新创建 storage 目录,再从头开始操作。

其他两台是相同部署方式,由于192.168.12.28上8040和8060端口已经被占用,所以配置文件的端口信息

启动192.168.12.28的BE,查看

image-20220510171748020

启动192.168.5.52的BE,查看

image-20220511165635154

部署Broker

配置文件为 apache_hdfs_broker/conf/apache_hdfs_broker.conf

注意:Broker 没有也不需要 priority_networks 参数,Broker 的服务默认绑定在 0.0.0.0 上,只需要在 ADD BROKER 时,填写正确可访问的 Broker IP 即可。

如果有特殊的 hdfs 配置,复制线上的 hdfs-site.xml 到 conf 目录下

启动 broker:

cd StarRocks-2.2.0-rc02/apache_hdfs_broker
bin/start_broker.sh --daemon

添加 broker 节点到集群中,查看 broker 状态:

mysql> 查看 broker 状态:

image-20220510163008083

继续部署其他两个broker,三个broker的状态都是正常

image-20220511165502366

实战使用

表创建示例

# 使用 root 用户建立 example_db 数据库
mysql> create database example_db;
# 通过 `show databases;` 查看数据库信息:
mysql> show databases;

image-20220510163653484
通过官方提供建表脚本创建表

CREATE TABLE IF NOT EXISTS detailDemo (
    make_time     DATE           NOT NULL COMMENT "YYYY-MM-DD",
    mache_verson  TINYINT        COMMENT "range [-128, 127]",
    mache_num     SMALLINT       COMMENT "range [-32768, 32767] ",
    de_code       INT            COMMENT "range [-2147483648, 2147483647]",
    saler_id      BIGINT         COMMENT "range [-2^63 + 1 ~ 2^63 - 1]",
    pd_num        LARGEINT       COMMENT "range [-2^127 + 1 ~ 2^127 - 1]",
    pd_type       CHAR(20)        NOT NULL COMMENT "range char(m),m in (1-255) ",
    pd_desc       VARCHAR(500)   NOT NULL COMMENT "upper limit value 65533 bytes",
    us_detail     STRING         NOT NULL COMMENT "upper limit value 65533 bytes",
    relTime       DATETIME       COMMENT "YYYY-MM-DD HH:MM:SS",
    channel       FLOAT          COMMENT "4 bytes",
    income        DOUBLE         COMMENT "8 bytes",
    account       DECIMAL(12,4)  COMMENT "",
    ispass        BOOLEAN        COMMENT "true/false"
) ENGINE=OLAP
DUPLICATE KEY(make_time, mache_verson)
PARTITION BY RANGE (make_time) (
    START ("2022-03-11") END ("2022-03-15") EVERY (INTERVAL 1 day)
)
DISTRIBUTED BY HASH(make_time, mache_verson) BUCKETS 8
PROPERTIES(
    "replication_num" = "3",
    "dynamic_partition.enable" = "true",
    "dynamic_partition.time_unit" = "DAY",
    "dynamic_partition.start" = "-3",
    "dynamic_partition.end" = "3",
    "dynamic_partition.prefix" = "p",
    "dynamic_partition.buckets" = "8"
);

image-20220511170021800

# 命令查看当前库的所有表
mysql> show tables;
# 查看表结构
mysql> desc detailDemo;
# 查看建表语句,在 StarRocks 中字段名不区分大小写,表名区分大小写
mysql> show create table detailDemo;

image-20220511170607492

建表语句说明

注意:索引创建对表模型和列有要求,详细说明见对应索引介绍章节。

**本人博客网站 **IT小神 www.itxiaoshen.com

标签:数仓,StarRocks,MPP,查询,集群,FE,conf,节点
来源: https://www.cnblogs.com/itxiaoshen/p/16264796.html