ARM架構下部署StarRocks3,你學會了嗎?
一、什么是 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 拉取鏡像
# 拉取鏡像
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 目錄下
# 進入鏡像內
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 文件。
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 目錄下
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
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 目錄下。
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
3.3 部署驗證
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 鏡像最終實現的部署方案,從運行的結果來看符合預期。