StarRocks 是一款新一代的极速全场景 MPP(Massively Parallel Processing)数据库,通过向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现的新一代大数据数据库,同时它兼容 MySQL5.7 的协议,支持标准 SQL 语法,极大降低了使用成本。作为大数据数据库,StarRocks 支持 Hive 作为外部 catalog 实现与 Hadoop 的直接对接,同时也支持将数据直接存储用于高效计算。
众所周知,当前 CPU 的主流系统架构分为 X86 架构和 ARM 架构。其中 X86 架构的所有权归属于 Intel 公司,而 ARM 架构则是开源的。
X86 架构的系统推出已经近 30 年,在这 30 年来互联网领域发展飞快,X86 架构也伴随着互联网的腾飞经过了高速发展的黄金时期,用户的应用、软件配套、软件开发等工具的配套和兼容都非常成熟,但由于 X86 架构的所有权问题,所有使用该架构的用户都需向 Intel 公司付费方可使用。
而开源的 ARM 架构在近年来尤为受到关注,面对当前日益复杂的国际环境以及基于 ARM 架构本身在功耗上的优异表现,国内外大量企业自研基于 ARM 架构的服务器芯片,越来越多的应用和软件配套也适配 ARM 架构。
StarRocks 部署需单独部署 FE 节点和 BE 节点,其中 FE 节点是 StarRocks 的前端节点,负责管理元数据,管理客户端连接,进行查询规划,查询调度等;BE 节点是 StarRocks 的后端节点,负责数据存储、SQL 执行等。
当前,由于 StarRocks 的 BE 节点部署强依赖 X86 架构下的 AVX2 指令集(StarRocks 向量化引擎强依赖),所以当前 StarRocks 官方针对 ARM 架构更多的是建议使用 Docker 部署或修改编译脚本关闭 AVX2 指令集重新打包部署,并未提供官方的稳定版本。针对当前情况以及实际的业务发展需求,我们评估决定使用官方提供的 Docker 镜像内的配置文件进行 ARM 架构下的部署。
本文的 StarRocks3 部署是基于已搭建完成 Hadoop3 集群条件下进行,若还未搭建 Hadoop 集群,请先搭建 Hadoop 集群再进行后续部署。
使用官方提供的 starrocks/artifacts-centos7:latest 镜像内文件进行部署。
# 拉取镜像
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
镜像内文件均在/release 目录下
# 进入镜像内
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/
部署需要 4 台机器,1 台机器部署 FE,3 台机器部署 BE。接下去以 node01、node02、node03、node04 区分。
StarRocks 文件默认安装路径为 /opt/starRocks。
替换该目录下的 hdfs-site.xml 文件。
cp /opt/hadoop3/etc/hadoop/hdfs-site.xml /opt/starRocks/apache_hdfs_borker/
在 node01 节点部署 FE,同时在该节点需搭建 Mysql 用于连接测试搭建完成后的 StarRocks。
1、复制 core-site.xml、hdfs-site.xml 和 hive-site.xml 至 /fe/conf 目录下
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 文件
# 新建 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 版本。
# 第一行添加 JAVA_HOME
export JAVA_HOME=/{JAVA 安装目录}/zulu11.66.19-ca-jdk11.0.20.1-linux_aarch64
# 第 108 行需手动修改 JAVA_VERSION
JAVA_VERSION=11
4、FE 节点启动
cd /opt/starRocks/fe/bin
./start_fe.sh --daemon
5、验证 FE 启动成功
# 使用 jps 检查进程,如果没有 StarRocksFE 进程,可在 /opt/starRocks/log 下查看 fe.log
jps
Jps
StarRocksFE
6、FE 节点日志自动清理
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 节点服务挂断拉起脚本
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 赋权及定时任务设置
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
1、替换 starrocks/allin1-ubuntu:latest 镜像内导出文件的 be 目录,使用 starrocks/artifacts-centos7:latest 镜像导出的 be 文件。
2、复制 core-site.xml、hdfs-site.xml 和 hive-site.xml 至 /be/conf 目录下。
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 地址。
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 文件
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 节点启动
各个节点需单独启动
cd /opt/starRocks/be/bin
./start_be.sh --daemon
6、验证 BE 启动成功
ps aux | grep starrocks_be
# 会看到一个 starrocks_be 的进程,如果没有可在 /opt/starRocks/be/log 下查看 be.INFO 日志
7、BE 节点日志自动清理
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 节点服务挂断拉起脚本
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 赋权及定时任务设置
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
FE 和 BE 节点均部署完成并启动完成后,在 FE 节点通过 Mysql 客户端进行部署验证及相关设置。
1、验证 FE 可用
# FE 节点地址,初始无密码,非 3306 端口需指定地址 127.0.0.1
mysql -h 127.0.0.1 -P9030 -uroot -p
2、添加 BE 节点
以下操作均已完成第一步,成功连接 FE。
# 添加 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 镜像最终实现的部署方案,从运行的结果来看符合预期。