一、什么是 StarRocks
StarRocks 是一款新一代的極速全場景 MPP(Massively Parallel Processing)數(shù)據(jù)庫,通過向量化、MPP 架構(gòu)、CBO、智能物化視圖、可實時更新的列式存儲引擎等技術(shù)實現(xiàn)的新一代大數(shù)據(jù)數(shù)據(jù)庫,同時它兼容 MySQL5.7 的協(xié)議,支持標(biāo)準(zhǔn) SQL 語法,極大降低了使用成本。作為大數(shù)據(jù)數(shù)據(jù)庫,StarRocks 支持 Hive 作為外部 catalog 實現(xiàn)與 Hadoop 的直接對接,同時也支持將數(shù)據(jù)直接存儲用于高效計算。
二、X86 和 ARM
眾所周知,當(dāng)前 CPU 的主流系統(tǒng)架構(gòu)分為 X86 架構(gòu)和 ARM 架構(gòu)。其中 X86 架構(gòu)的所有權(quán)歸屬于 Intel 公司,而 ARM 架構(gòu)則是開源的。
X86 架構(gòu)的系統(tǒng)推出已經(jīng)近 30 年,在這 30 年來互聯(lián)網(wǎng)領(lǐng)域發(fā)展飛快,X86 架構(gòu)也伴隨著互聯(lián)網(wǎng)的騰飛經(jīng)過了高速發(fā)展的黃金時期,用戶的應(yīng)用、軟件配套、軟件開發(fā)等工具的配套和兼容都非常成熟,但由于 X86 架構(gòu)的所有權(quán)問題,所有使用該架構(gòu)的用戶都需向 Intel 公司付費方可使用。
而開源的 ARM 架構(gòu)在近年來尤為受到關(guān)注,面對當(dāng)前日益復(fù)雜的國際環(huán)境以及基于 ARM 架構(gòu)本身在功耗上的優(yōu)異表現(xiàn),國內(nèi)外大量企業(yè)自研基于 ARM 架構(gòu)的服務(wù)器芯片,越來越多的應(yīng)用和軟件配套也適配 ARM 架構(gòu)。
三、StarRocks 部署
StarRocks 部署需單獨部署 FE 節(jié)點和 BE 節(jié)點,其中 FE 節(jié)點是 StarRocks 的前端節(jié)點,負(fù)責(zé)管理元數(shù)據(jù),管理客戶端連接,進(jìn)行查詢規(guī)劃,查詢調(diào)度等;BE 節(jié)點是 StarRocks 的后端節(jié)點,負(fù)責(zé)數(shù)據(jù)存儲、SQL 執(zhí)行等。
當(dāng)前,由于 StarRocks 的 BE 節(jié)點部署強(qiáng)依賴 X86 架構(gòu)下的 AVX2 指令集(StarRocks 向量化引擎強(qiáng)依賴),所以當(dāng)前 StarRocks 官方針對 ARM 架構(gòu)更多的是建議使用 Docker 部署或修改編譯腳本關(guān)閉 AVX2 指令集重新打包部署,并未提供官方的穩(wěn)定版本。針對當(dāng)前情況以及實際的業(yè)務(wù)發(fā)展需求,我們評估決定使用官方提供的 Docker 鏡像內(nèi)的配置文件進(jìn)行 ARM 架構(gòu)下的部署。
本文的 StarRocks3 部署是基于已搭建完成 Hadoop3 集群條件下進(jìn)行,若還未搭建 Hadoop 集群,請先搭建 Hadoop 集群再進(jìn)行后續(xù)部署。
3.1 Docker 鏡像內(nèi)配置文件獲取
使用官方提供的 starrocks/artifacts-centos7:latest 鏡像內(nèi)文件進(jìn)行部署。
3.1.1 拉取鏡像
# 拉取鏡像
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 鏡像內(nèi)文件導(dǎo)出
鏡像內(nèi)文件均在/release 目錄下
# 進(jìn)入鏡像內(nèi)
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/
# 文件導(dǎo)出
docker cp artifacts-art:/release/starRocks.tar.gz /usr/local/
3.2 節(jié)點部署
部署需要 4 臺機(jī)器,1 臺機(jī)器部署 FE,3 臺機(jī)器部署 BE。接下去以 node01、node02、node03、node04 區(qū)分。
StarRocks 文件默認(rèn)安裝路徑為 /opt/starRocks。
3.2.1 apache_hdfs_borker 配置
替換該目錄下的 hdfs-site.xml 文件。
cp /opt/hadoop3/etc/hadoop/hdfs-site.xml /opt/starRocks/apache_hdfs_borker/
3.2.2 FE 節(jié)點部署
在 node01 節(jié)點部署 FE,同時在該節(jié)點需搭建 Mysql 用于連接測試搭建完成后的 StarRocks。
1、復(fù)制 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 版本強(qiáng)依賴 JAVA11 以上版本,但搭建的 Hadoop3 集群默認(rèn)使用 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 節(jié)點啟動
cd /opt/starRocks/fe/bin
./start_fe.sh --daemon
5、驗證 FE 啟動成功
# 使用 jps 檢查進(jìn)程,如果沒有 StarRocksFE 進(jìn)程,可在 /opt/starRocks/log 下查看 fe.log
jps
Jps
StarRocksFE
6、FE 節(jié)點日志自動清理
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 節(jié)點服務(wù)掛斷拉起腳本
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 賦權(quán)及定時任務(wù)設(shè)置
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 節(jié)點部署
1、替換 starrocks/allin1-ubuntu:latest 鏡像內(nèi)導(dǎo)出文件的 be 目錄,使用 starrocks/artifacts-centos7:latest 鏡像導(dǎo)出的 be 文件。
2、復(fù)制 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 節(jié)點的 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 節(jié)點啟動
各個節(jié)點需單獨啟動
cd /opt/starRocks/be/bin
./start_be.sh --daemon
6、驗證 BE 啟動成功
ps aux | grep starrocks_be
# 會看到一個 starrocks_be 的進(jìn)程,如果沒有可在 /opt/starRocks/be/log 下查看 be.INFO 日志
7、BE 節(jié)點日志自動清理
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 節(jié)點服務(wù)掛斷拉起腳本
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 賦權(quán)及定時任務(wù)設(shè)置
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 節(jié)點均部署完成并啟動完成后,在 FE 節(jié)點通過 Mysql 客戶端進(jìn)行部署驗證及相關(guān)設(shè)置。
1、驗證 FE 可用
# FE 節(jié)點地址,初始無密碼,非 3306 端口需指定地址 127.0.0.1
mysql -h 127.0.0.1 -P9030 -uroot -p
2、添加 BE 節(jié)點
以下操作均已完成第一步,成功連接 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
# 設(shè)置密碼
SET PASSword for root = PASSWORD('密碼');
# 按需選擇是否創(chuàng)建初始數(shù)據(jù)庫,僅用作示例新建 ads 庫
create database ads;
# 按需選擇是否創(chuàng)建 Hive 外部 catalog
CREATE EXTERNAL CATALOG hive
PROPERTIES ("type" = "hive","hive.metastore.uris"="thrift://{hivemetastore}");
# 檢查 catalog
show catalogs;
# 驗證 Hive catalog 使用是否正常
四、總結(jié)
本文講解了如何在 ARM 架構(gòu)下部署 StarRocks3 的詳細(xì)步驟。
在科技高速發(fā)展的當(dāng)下,ARM 架構(gòu)由于其開源性和功耗上的優(yōu)異表現(xiàn)正在受到越來越多的關(guān)注,大數(shù)據(jù)相關(guān)的各種組件也紛紛推出了基于 ARM 架構(gòu)的版本用于更好的支持用戶體驗。由于 StarRocks3 并無官方的 ARM 版本,通過查詢網(wǎng)上資料也并無詳細(xì)完整的相關(guān)文檔,所以本文也僅是利用 Docker 鏡像最終實現(xiàn)的部署方案,從運行的結(jié)果來看符合預(yù)期。