MPP / 大数据

新一代极速全场景MPP数据库StarRocks学习和实践

浅时光博客 · 9月26日 · 2022年 · 3,045 字 · 约 11 分钟 4.5w次已读
AI 文章摘要 时光AI(本站开发)

一、StarRocks简介


1、StarRocks概述

  • StarRocks是新一代极速全场景MPP数据库。
  • StarRocks充分吸收关系型 OLAP 数据库和分布式存储系统在大数据时代的优秀研究成果,在业界实践的基础上,进一步改进优化、升级架构,并增添了众多全新功能,形成了全新的企业级产品。
  • StarRocks致力于构建极速统一分析体验,满足企业用户的多种数据分析场景,支持多种数据模型(明细模型、聚合模型、更新模型),多种导入方式(批量和实时),支持导入多达10000列的数据,可整合和接入多种现有系统(Spark、Flink、Hive、 ElasticSearch)。
  • StarRocks兼容MySQL协议,可使用MySQL客户端和常用BI工具对接StarRocks来进行数据分析。
  • StarRocks采用分布式架构,对数据表进行水平划分并以多副本存储。集群规模可以灵活伸缩,能够支持10PB级别的数据分析; 支持MPP框架,并行加速计算; 支持多副本,具有弹性容错能力。
  • StarRocks采用关系模型,使用严格的数据类型和列式存储引擎,通过编码和压缩技术,降低读写放大;使用向量化执行方式,充分挖掘多核CPU的并行计算能力,从而显著提升查询性能。
StarRocks01
StarRocks02

2、StarRocks特性

StarRocks的架构设计融合了MPP数据库,以及分布式系统的设计思想,具有以下特性:

架构精简

StarRocks内部通过MPP计算框架完成SQL的具体执行工作。MPP框架本身能够充分的利用多节点的计算能力,整个查询并行执行,从而实现良好的交互式分析体验。 StarRocks集群不需要依赖任何其他组件,易部署、易维护,极简的架构设计,降低了StarRocks系统的复杂度和维护成本,同时也提升了系统的可靠性和扩展性。 管理员只需要专注于StarRocks系统,无需学习和管理任何其他外部系统。

全面向量化引擎

StarRocks的计算层全面采用了向量化技术,将所有算子、函数、扫描过滤和导入导出模块进行了系统性优化。通过列式的内存布局、适配CPU的SIMD指令集等手段,充分发挥了现代CPU的并行计算能力,从而实现亚秒级别的多维分析能力。

智能查询优化

StarRocks通过CBO优化器(Cost Based Optimizer)可以对复杂查询自动优化。无需人工干预,就可以通过统计信息合理估算执行成本,生成更优的执行计划,大大提高了Adhoc和ETL场景的数据分析效率。

联邦查询

StarRocks支持使用外表的方式进行联邦查询,当前可以支持Hive、MySQL、Elasticsearch三种类型的外表,用户无需通过数据导入,可以直接进行数据查询加速。

高效更新

StarRocks支持多种数据模型,其中更新模型可以按照主键进行upsert/delete操作,通过存储和索引的优化可以在并发更新的同时实现高效的查询优化,更好的服务实时数仓的场景。

智能物化视图

StarRocks支持智能的物化视图。用户可以通过创建物化视图,预先计算生成预聚合表用于加速聚合类查询请求。StarRocks的物化视图能够在数据导入时自动完成汇聚,与原始表数据保持一致。并且在查询的时候,用户无需指定物化视图,StarRocks能够自动选择最优的物化视图来满足查询请求。

标准SQL

StarRocks支持标准的SQL语法,包括聚合、JOIN、排序、窗口函数和自定义函数等功能。StarRocks可以完整支持TPC-H的22个SQL和TPC-DS的99个SQL。此外,StarRocks还兼容MySQL协议语法,可使用现有的各种客户端工具、BI软件访问StarRocks,对StarRocks中的数据进行拖拽式分析。

流批一体

StarRocks支持实时和批量两种数据导入方式,支持的数据源有Kafka、HDFS、本地文件,支持的数据格式有ORC、Parquet和CSV等,支持导入多达10000列的数据。StarRocks可以实时消费Kafka数据来完成数据导入,保证数据不丢不重(exactly once)。StarRocks也可以从本地或者远程(HDFS)批量导入数据。

高可用易扩展

StarRocks的元数据和数据都是多副本存储,并且集群中服务有热备,多实例部署,避免了单点故障。集群具有自愈能力,可弹性恢复,节点的宕机、下线、异常都不会影响StarRocks集群服务的整体稳定性。 StarRocks采用分布式架构,存储容量和计算能力可近乎线性水平扩展。StarRocks单集群的节点规模可扩展到数百节点,数据规模可达到10PB级别。 扩缩容期间无需停服,可以正常提供查询服务。 另外StarRocks中表模式热变更,可通过一条简单SQL命令动态地修改表的定义,例如增加列、减少列、新建物化视图等。同时,处于模式变更中的表也可也正常导入和查询数据。

二、StarRocks部署


1、软硬件要求

环境准备

  • 集群节点需要以下环境支持:
    • Linux (Centos 7+)
    • 推荐 Oracle Java 1.8+
    • CPU 需要支持 AVX2 指令集
    • ulimit -n 配置 65535,启动脚本会自动设置,需要启动的用户有设置 ulimit -n 权限
    • 集群时钟需同步
    • 网络需要万兆网卡和万兆交换机
  • 测试集群建议节点配置:BE 推荐 16 核 64GB 以上,FE 推荐 8 核 16GB 以上。建议 FE,BE 独立部署。

2、部署FE服务

2.1:部署单台FE

  1. 先部署一台FE节点(默认为Leader),然后后面添加FE节点,实现FE的高可用
  2. fe.conf 中 JAVA_OPTS 默认 java 最大堆内存为 8GB,为了避免 GC 建议 16G 以上,StarRocks 的元数据都在内存中保存
  3. 生产环境强烈建议 meta_dir 单独指定目录不要放在 Doris安装目录下,最好是单独的磁盘(最后是SSD磁盘)
#创建元数据和日志存储目录,FE节点都需要创建
mkdir -p /data/StarRocks-fe/{StarRocks-meta,log}

[root@starrocks-fe_be01 ~]# vim /usr/local/StarRocks/fe/conf/fe.conf
StarRocks03
#我们将StarRocks解压后的目录和修改的配置全部拷贝到另外的FE节点上
export NODE_IPS=(192.168.66.132 192.168.66.133)
for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    scp -r /usr/local/StarRocks root@${node_ip}:/usr/local/
  done
  • 启动服务
#通过Systemd托管
cat > /usr/lib/systemd/system/StarRocks-fe.service <<EOF
[Unit]
Description=StarRocks FE Service
Documentation=https://www.starrocks.com/
After=network.target network-online.target
Wants=network-online.target

[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_281-amd64"
User=root
Group=root
ExecStart=/usr/local/StarRocks/fe/bin/start_fe.sh --daemon
ExecStop=/usr/local/StarRocks/fe/bin/stop_fe.sh
ExecReload=/bin/kill --signal HUP
KillMode=control-group
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=default.target
EOF

systemctl daemon-reload && systemctl restart StarRocks-fe.service && systemctl enable StarRocks-fe.service && systemctl status StarRocks-fe.service

#检查服务监听状态
ss -tnlp | grep 9030
ps -aux | grep StarRocks

2.2:FE高可用部署

  • FE-HA配置FE的高可用集群采用主从复制架构, 可避免FE单点故障. FE采用了类raft的bdbje协议完成选主,  日志复制和故障切换.  在FE集群中,  多实例分为两种角色: follower和observer;  前者为复制协议的可投票成员, 参与选主和提交日志, 一般数量为奇数(2n+1), 使用多数派(n+1)确认,  可容忍少数派(n)故障;  而后者属于非投票成员,  用于异步订阅复制日志,  observer的状态落后于follower,  类似其他复制协议中的leaner角色.
  • FE集群从follower中自动选出master节点,  所有更改状态操作都由master节点执行,  从FE的master节点可以读到最新的状态.  更改操作可以从非master节点发起,  继而转发给master节点执行, 非master节点记录最近一次更改操作在复制日志中的LSN, 读操作可以直接在非master节点上执行, 但需要等待非master节点的状态已经同步到最近一次更改操作的LSN, 因此读写非Master节点满足顺序一致性. Observer节点能够增加FE集群的读负载能力, 时效性要求放宽的非紧要用户可以读observer节点.
  • FE节点之间的时钟相差不能超过5s, 使用NTP协议校准时间.
  • 一台机器上只可以部署单个FE节点。所有FE节点的http_port需要相同。
#连接到FE,需要提前安装MySQL客户端程序
[root@StarRocks-fe_be01 ~]# mysql -h 192.168.66.131 -P 9030 -uroot

#默认root无密码,通过以下命令修改 root密码 。
mysql> SET PASSWORD FOR 'root' = PASSWORD('admin123456');

mysql> ALTER SYSTEM ADD FOLLOWER "192.168.66.132:9010";
mysql> ALTER SYSTEM ADD OBSERVER "192.168.66.133:9010";

说明:Follower和 Observer节点启动时需要指定Leader节点,启动添加参数 –helper leader主机:edit_log_port

cat > /opt/StarRocks-fe.service <<EOF
[Unit]
Description=StarRocks FE Service
Documentation=https://www.starrocks.com/
After=network.target network-online.target
Wants=network-online.target

[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_281-amd64"
User=root
Group=root
ExecStart=/usr/local/StarRocks/fe/bin/start_fe.sh --helper 192.168.66.131:9010 --daemon
ExecStop=/usr/local/StarRocks/fe/bin/stop_fe.sh
ExecReload=/bin/kill --signal HUP
KillMode=control-group
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=default.target
EOF

#拷贝配置至另外的FE节点
export NODE_IPS=(192.168.66.132 192.168.66.133)

for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    scp /opt/StarRocks-fe.service root@${node_ip}:/usr/lib/systemd/system/
  done

注意:登入另外的FE节点修改配置中的 priority_networks 参数为对应节点的IP地址

StarRocks04
#启动FE服务
systemctl daemon-reload && systemctl restart StarRocks-fe.service && systemctl enable StarRocks-fe.service &&systemctl status StarRocks-fe.service

2.3:检查FE集群信息

[root@StarRocks-fe_be01 ~]# mysql -h 192.168.66.131 -P 9030 -uroot -p
mysql> SHOW PROC '/frontends'\G
StarRocks05

3、部署BE服务

  • storage_root_path:默认在 be/storage下,需要手动创建该目录。多个路径之间使用英文状态的分号 ;分隔(最后一个目录后不要加)
  • priority_networks:修改绑定 ip,每台机器修改成自己的 ip
  • PPROF_TMPDIR:修改为指定存储的目录

3.1:拷贝修改BE配置

#创建数据和日志存储目录,BE节点都需要创建
mkdir -p /data/StarRocks-be/{storage1,storage2,log}

[root@StarRocks-fe_be01 ~]# vim /usr/local/StarRocks/be/conf/be.conf
StarRocks06

将BE相关的配置和目录拷贝至其他的BE节点,然后登入到各个节点修改BE配置文件,修改绑定IP为自己的IP地址

export NODE_IPS=(192.168.66.132 192.168.66.133)
for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    scp /usr/local/StarRocks/be/conf/be.conf root@${node_ip}:/usr/local/StarRocks/be/conf/
  done

#登入其他BE节点修改绑定IP
~]# vim /usr/local/StarRocks/be/conf/be.conf
StarRocks07

3.2:FE添加BE节点

  • 使用 MySQL Client连接 FE,添加BE
[root@StarRocks-fe_be01 ~]# mysql -h 192.168.66.131 -P 9030 -uroot -p
ALTER SYSTEM ADD BACKEND "192.168.66.131:9050";
ALTER SYSTEM ADD BACKEND "192.168.66.132:9050";
ALTER SYSTEM ADD BACKEND "192.168.66.133:9050";

3.3:启动BE服务

#通过Systemd托管程序
cat > /usr/lib/systemd/system/StarRocks-be.service <<EOF
[Unit]
Description=Doris BE Service
Documentation=https://doris.apache.org
After=network.target network-online.target
Wants=network-online.target

[Service]
Type=forking
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
User=root
Group=root
ExecStart=/usr/local/StarRocks/be/bin/start_be.sh --daemon
ExecStop=/usr/local/StarRocks/be/bin/stop_be.sh
ExecReload=/bin/kill --signal HUP
KillMode=control-group
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=default.target
EOF

#拷贝Service服务配置
export NODE_IPS=(192.168.66.131 192.168.66.132 192.168.66.133)
for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    scp /usr/lib/systemd/system/StarRocks-be.service root@${node_ip}:/usr/lib/systemd/system/
  done

#启动服务
export NODE_IPS=(192.168.66.131 192.168.66.132 192.168.66.133)

for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh root@${node_ip} "systemctl daemon-reload && systemctl restart StarRocks-be.service && systemctl enable StarRocks-be.service && systemctl status StarRocks-be.service"
  done

3.4:检查BE服务

[root@StarRocks-fe_be01 ~]# mysql -h 192.168.66.131 -P 9030 -uroot -p
#Alive为 true表示该 BE节点存活
mysql> SHOW PROC '/backends'\G
StarRocks08

三、StarRock UI


默认使用 Http 协议进行 WebUI 访问,在浏览器输入以下格式地址访问

http://FE_IP:FE_HTTP_PORT(默认8030)

  • 默认账号:root
  • 默认密码:数据库root密码
StarRocks09

之前在进行MPP产品选型中,对主流的两款MPP产品StarRocks、Doris进行各项指标压测之后,发现StarRocks各项指标都要优于Doris

0 条回应

必须 注册 为本站用户, 后才可以发表评论!