一、什么是 StarRocks
StarRocks 是一款新一代的极速全场景 MPP(Massively Parallel Processing)数据库,通过向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现的新一代大数据数据库,同时它兼容 Mysql5.7 的协议,支持标准 SQL 语法,极大降低了使用成本。作为大数据数据库,StarRocks 支持 Hive 作为外部 catalog 实现与 Hadoop 的直接对接,同时也支持将数据直接存储用于高效计算。
二、X86 和 ARM
众所周知,当前 CPU 的主流系统架构分为 X86 架构和 ARM 架构。其中 X86 架构的所有权归属于 Intel 公司,而 ARM 架构则是开源的。
X86 架构的系统推出已经近 30 年,在这 30 年来互联网领域发展飞快,X86 架构也伴随着互联网的腾飞经过了高速发展的黄金时期,用户的应用、软件配套、软件开发等工具的配套和兼容都非常成熟,但由于 X86 架构的所有权问题,所有使用该架构的用户都需向 Intel 公司付费方可使用。
而开源的 ARM 架构在近年来尤为受到关注,面对当前日益复杂的国际环境以及基于 ARM 架构本身在功耗上的优异表现,国内外大量企业自研基于 ARM 架构的服务器芯片,越来越多的应用和软件配套也适配 ARM 架构。
三、StarRocks 部署
StarRocks 部署需单独部署 FE 节点和 BE 节点,其中 FE 节点是 StarRocks 的前端节点,负责管理元数据,管理客户端连接,进行查询规划,查询调度等;BE 节点是 StarRocks 的后端节点,负责数据存储、SQL 执行等。
当前,由于 StarRocks 的 BE 节点部署强依赖 X86 架构下的 AVX2 指令集(StarRocks 向量化引擎强依赖),所以当前 StarRocks 官方针对 ARM 架构更多的是建议使用 Docker 部署或修改编译脚本关闭 AVX2 指令集重新打包部署,并未提供官方的稳定版本。针对当前情况以及实际的业务发展需求,我们评估决定使用官方提供的 Docker 镜像内的配置文件进行 ARM 架构下的部署。
本文的 StarRocks3 部署是基于已搭建完成 Hadoop3 集群条件下进行,若还未搭建 Hadoop 集群,请先搭建 Hadoop 集群再进行后续部署。
3.1 Docker 镜像内配置文件获取
使用官方提供的 starrocks/artifacts-centos7:latest 镜像内文件进行部署。
3.1.1 拉取镜像
代码语言:javascript复制# 拉取镜像
docker pull starrocks/artifacts-centos7:latest
# 启动镜像
docker run -p 9030:9030 -p 8030:8030 -p 8040:8040 --privileged=true -itd --name starrocks-art starrocks/artifacts-centos7
3.1.2 镜像内文件导出
镜像内文件均在/release 目录下
代码语言:javascript复制# 进入镜像内
docker exec -it starrocks-art sh
mkdir starRocks
cp -r be_artifacts/be starRocks/
cp -r fe_artifacts/fe starRocks/
cp -r broker_artifacts/apache_hdfs_broker starRocks/
# 文件压缩
tar -zcvf starRocks.tar.gz starRocks/
# 文件导出
docker cp artifacts-art:/release/starRocks.tar.gz /usr/local/
3.2 节点部署
部署需要 4 台机器,1 台机器部署 FE,3 台机器部署 BE。接下去以 node01、node02、node03、node04 区分。
StarRocks 文件默认安装路径为 /opt/starRocks。
3.2.1 apache_hdfs_borker 配置
替换该目录下的 hdfs-site.xml 文件。
代码语言:javascript复制cp /opt/hadoop3/etc/hadoop/hdfs-site.xml /opt/starRocks/apache_hdfs_borker/
3.2.2 FE 节点部署
在 node01 节点部署 FE,同时在该节点需搭建 Mysql 用于连接测试搭建完成后的 StarRocks。
1、复制 core-site.xml、hdfs-site.xml 和 hive-site.xml 至 /fe/conf 目录下
代码语言:javascript复制cp /opt/hadoop3/etc/hadoop/core-site.xml /opt/starRocks/fe/conf/
cp /opt/hadoop3/etc/hadoop/hdfs-site.xml /opt/starRocks/fe/conf/
cp /opt/hive/conf/hive-site.xml /opt/starRocks/fe/conf/
2、 修改 fe.conf 文件
代码语言:javascript复制# 新建 meta 文件夹
cd /opt/starRocks/fe
mkdir meta
vim conf/fe.conf
# 添加
meta_dir=/opt/starRocks/fe/meta
priority_networks=node01/24
enable_udf=true
3、start_fe.sh 脚本修改
由于 StarRocks3 版本强依赖 JAVA11 以上版本,但搭建的 Hadoop3 集群默认使用 JAVA8 的版本,所以需手动指定 StarRocks3 使用的 JAVA 版本,本文使用 zulu11.66.19-ca-jdk11.0.20.1-linux_aarch64 版本。
代码语言:javascript复制# 第一行添加 JAVA_HOME
export JAVA_HOME=/{JAVA 安装目录}/zulu11.66.19-ca-jdk11.0.20.1-linux_aarch64
# 第 108 行需手动修改 JAVA_VERSION
JAVA_VERSION=11
4、FE 节点启动
代码语言:javascript复制cd /opt/starRocks/fe/bin
./start_fe.sh --daemon
5、验证 FE 启动成功
代码语言:javascript复制# 使用 jps 检查进程,如果没有 StarRocksFE 进程,可在 /opt/starRocks/log 下查看 fe.log
jps
Jps
StarRocksFE
6、FE 节点日志自动清理
代码语言:javascript复制vim /usr/local/bin/auto-del-3-days-ago-log.sh
#!/bin/sh
find /opt/starRocks/fe/log/ -mtime 3 -name "fe.*" -exec rm -rf {} ;
7、FE 节点服务挂断拉起脚本
代码语言:javascript复制vim /usr/local/bin/monitor_starrocks_fe.sh
#!/bin/sh
pidFE=`ps aux | grep 'StarRocksFE' | grep -v 'grep' | awk '{print $2}'`
if [[ !$pidFE ]];
then
sh /opt/starRocks/fe/bin/start_fe.sh --daemon
fi
8、bash 赋权及定时任务设置
代码语言:javascript复制chmod x /usr/local/bin/auto-del-3-days-ago-log.sh
chmod x /usr/local/bin/monitor_starrocks_fe.sh
10 0 * * * /bin/bash /usr/local/bin/auto-del-3-days-ago-log.sh >/dev/null 2>&1
*/2 * * * * /bin/bash /usr/local/bin/monitor_starrocks_fe.sh >/dev/null 2>&1
3.2.3 BE 节点部署
1、替换 starrocks/allin1-ubuntu:latest 镜像内导出文件的 be 目录,使用 starrocks/artifacts-centos7:latest 镜像导出的 be 文件。
2、复制 core-site.xml、hdfs-site.xml 和 hive-site.xml 至 /be/conf 目录下。
代码语言:javascript复制cp /opt/hadoop3/etc/hadoop/core-site.xml /opt/starRocks/be/conf/
cp /opt/hadoop3/etc/hadoop/hdfs-site.xml /opt/starRocks/fe/conf/
cp /opt/hive/conf/hive-site.xml /opt/starRocks/be/conf/
3、修改 be.conf 文件
priority_networks 需修改为各 BE 节点的 ip 地址。
代码语言:javascript复制cd /opt/starRocks/be
mkdir data
vim conf/be.conf
priority_networks=node02/24
load_process_max_memory_limit_percent=50
mem_limit=75%
storage_root_path=/opt/starRocks/be/data
4、修改 start_be.sh 文件
代码语言:javascript复制cd /opt/starRocks/be/bin
vim start_be.sh
export JAVA_HOME=/{JAVA 安装目录}/zulu11.66.19-ca-jdk11.0.20.1-linux_aarch64
5、BE 节点启动
各个节点需单独启动
代码语言:javascript复制cd /opt/starRocks/be/bin
./start_be.sh --daemon
6、验证 BE 启动成功
代码语言:javascript复制ps aux | grep starrocks_be
# 会看到一个 starrocks_be 的进程,如果没有可在 /opt/starRocks/be/log 下查看 be.INFO 日志
7、BE 节点日志自动清理
代码语言:javascript复制vim /usr/local/bin/auto-del-3-days-ago-log.sh
#!/bin/sh
find /opt/starRocks/be/log/ -mtime 3 -name "be.*" -exec rm -rf {} ;
8、BE 节点服务挂断拉起脚本
代码语言:javascript复制vim /usr/local/bin/monitor_be.sh
#!/bin/sh
pidBE=`ps aux | grep 'starrocks_be' | grep -v 'grep' | awk '{print $2}'`
if [[ !$pidBE ]];
then
sh /opt/starRocks/be/bin/start_be.sh --daemon
fi
9、bash 赋权及定时任务设置
代码语言:javascript复制chmod x /usr/local/bin/auto-del-3-days-ago-log.sh
chmod x /usr/local/bin/monitor_starrocks_be.sh
10 0 * * * /bin/bash /usr/local/bin/auto-del-3-days-ago-log.sh >/dev/null 2>&1
*/2 * * * * /bin/bash /usr/local/bin/monitor_starrocks_be.sh >/dev/null 2
3.3 部署验证
FE 和 BE 节点均部署完成并启动完成后,在 FE 节点通过 Mysql 客户端进行部署验证及相关设置。
1、验证 FE 可用
代码语言:javascript复制# FE 节点地址,初始无密码,非 3306 端口需指定地址 127.0.0.1
mysql -h 127.0.0.1 -P9030 -uroot -p
2、添加 BE 节点
以下操作均已完成第一步,成功连接 FE。
代码语言:javascript复制# 添加 BE,所有 BE 都添加
ALTER SYSTEM ADD BACKEND "node02:9050";
ALTER SYSTEM ADD BACKEND "node03:9050";
ALTER SYSTEM ADD BACKEND "node04:9050";
# 检查 BE, 所有 Alive: true,否则 BE 有问题
SHOW PROC '/backends'G
# 检查 FE
show proc '/frontends'G
# 设置密码
SET PASSWORD for root = PASSWORD('密码');
# 按需选择是否创建初始数据库,仅用作示例新建 ads 库
create database ads;
# 按需选择是否创建 Hive 外部 catalog
CREATE EXTERNAL CATALOG hive
PROPERTIES ("type" = "hive","hive.metastore.uris"="thrift://{hivemetastore}");
# 检查 catalog
show catalogs;
# 验证 Hive catalog 使用是否正常
四、总结
本文讲解了如何在 ARM 架构下部署 StarRocks3 的详细步骤。
在科技高速发展的当下,ARM 架构由于其开源性和功耗上的优异表现正在受到越来越多的关注,大数据相关的各种组件也纷纷推出了基于 ARM 架构的版本用于更好的支持用户体验。由于 StarRocks3 并无官方的 ARM 版本,通过查询网上资料也并无详细完整的相关文档,所以本文也仅是利用 Docker 镜像最终实现的部署方案,从运行的结果来看符合预期。