Docker - StarRocks容器镜像构建

StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。StarRocks 既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数据。StarRocks 兼容 MySQL 协议,可使用 MySQL 客户端和常用 BI 工具对接。同时 StarRocks 具备水平扩展,高可用、高可靠、易运维等特性。广泛应用于实时数仓、OLAP 报表、数据湖分析等场景。

官方文档:StarRocks 简介

一、打包构建

下载并解压文件 build-starrocks.zip 到指定目录

# version为需要构建的版本,默认为2.5.0

# 构建FE
docker build --no-cache --progress=plain -f ./starrocks-fe.dockerfile -t renzicu/starrocks-fe:2.5.0 --build-arg version="2.5.0" .

# 构建BE
docker build --no-cache --progress=plain -f ./starrocks-be.dockerfile -t renzicu/starrocks-be:2.5.0 --build-arg version="2.5.0" .

# 构建Broker
docker build --no-cache --progress=plain -f ./starrocks-broker.dockerfile -t renzicu/starrocks-broker:2.5.0 --build-arg version="2.5.0" .

# 打包后程序根目录在 /starrocks,可自行修改

# 推送到 hub.docker.com
# docker login -u renzicu -p xxxxxxxxxxx
# docker tag starrocks-fe:2.5.0 renzicu/starrocks-fe:2.5.0
docker push renzicu/starrocks-fe:2.5.0

二、镜像测试

1. FrontEnd简称FE,是StarRocks的前端节点,负责管理元数据,管理客户端连接,进行查询规划,查询调度等工作。
docker run -d \
# http_port、query_port
-p 8030:8030 -p 9030:9030 \
# rpc_port、edit_log_port
-p 9020:9020 -p 9010:9010 \
--restart unless-stopped \
--name starrocks-fe1 \
# -e OPTS="--helper 172.17.0.1:9010" \
-v /etc/localtime:/etc/localtime:ro \
-v /data/starrocks/fe/meta:/starrocks/meta \
-v /data/starrocks/fe/log:/starrocks/log \
renzicu/starrocks-fe:2.5.0
2. BackEnd简称BE,是StarRocks的后端节点,负责数据存储,计算执行,以及compaction,副本管理等工作。
docker run -d \
# be_port、webserver_port
-p 9060:9060 -p 8040:8040 \
# heartbeat_service_port、brpc_port
-p 9050:9050 -p 8060:8060 \
--restart unless-stopped \
--name starrocks-be1 \
-v /etc/localtime:/etc/localtime:ro \
-v /data/starrocks/be/storage:/starrocks/storage \
-v /data/starrocks/be/log:/starrocks/log \
renzicu/starrocks-be:2.5.0
3. Broker,是StarRocks中和外部HDFS/对象存储等外部数据对接的中转服务,辅助提供导入导出功能。
docker run -d \
-p 8000:8000 \
--restart unless-stopped \
--name starrocks-broker1 \
-v /etc/localtime:/etc/localtime:ro \
renzicu/starrocks-broker:2.5.0

附:官方镜像构建

如果部署BE的机器CPU不支持AVX2指令集,推荐使用此方式进行构建。2.5.0之后的版本构建过程中会自动判断此机器是否支持AVX2指令,硬盘建议剩余50G+的可用空间。
1. 编译模块
# 获取最新开发镜像 https://hub.docker.com/r/starrocks/dev-env/tags
export starrocks_dev="starrocks/dev-env:branch-2.5"
# 获取最新版本源码 https://github.com/StarRocks/starrocks/tags
export starrocks_url="https://github.com/StarRocks/starrocks/archive/refs/tags/2.5.0.tar.gz"

# 下载源文件
wget ${starrocks_url} -O /root/starrocks-main.tar.gz
# 解压源文件
mkdir /root/starrocks-main && tar -zxvf /root/starrocks-main.tar.gz -C /root/starrocks-main --strip-components 1
# 拉取镜像
docker pull ${starrocks_dev}

# 挂载开发镜像
docker run -it -v /root/.m2:/root/.m2 -v /root/starrocks-main:/root/starrocks-main --name starrocks-image --privileged=true -d ${starrocks_dev}
# 进入容器
docker exec -it starrocks-image /bin/bash
# 切换到源码目录
cd /root/starrocks-main

# 执行编译
# 这一步会下载很多依赖,会非常耗时。运行容器时我们挂载本地.m2目录即是为了首次编译下载的依赖后面再编译时可以复用。
# 只要不报错,我们慢慢等待即可(长则数小时)。编译完成后,产出文件在output/目录中
./build.sh

# 可以只编译指定模块
Usage: build.sh <options>
  Optional options:
     --be               build Backend
     --fe               build Frontend and Spark Dpp application
     --spark-dpp        build Spark DPP application
     --clean            clean and build target
     --with-gcov        build Backend with gcov, has an impact on performance
     --without-gcov     build Backend without gcov(default)
     --with-hdfs        enable hdfs support
     --without-hdfs     disable hdfs support

# 编译Broker
# 前面的操作不会编译Broker,我们需要单独编译。编译后,产出文件在fs_brokers/apache_hdfs_broker/output目录中
cd fs_brokers/apache_hdfs_broker/ && sh build.sh

# 构建完成后,可以选择删除开发容器和镜像
docker rm -f starrocks-image && docker rmi ${starrocks_dev}
**注意**:当构建到 [100%] 时,可能会因为内存不足,报如下错误:collect2: fatal error: ld terminated with signal 9 [Killed],可以使用swap交换分区来解决。
# 以下命令是在宿主机上执行,不是上述运行的容器内。要注意!!!
# 查看所有swap分区
cat /proc/swaps

# 创建目录保存swap文件使用
mkdir -p /swapfile && cd /swapfile
# 创建20G的交换空间
dd if=/dev/zero of=swap bs=1024 count=20000000
# 创建并启用交换分区,注:下面命令的参数swap是dd的输出文件swap
mkswap swap && swapon swap

# 使用完成后,卸载并删除交换分区
swapoff swap && rm swap
2. 构建镜像
下载并解压文件 build-starrocks-2.zip 到指定目录

# 镜像打包目录(上边解压后完整路径)
export build_starrocks_dir="/root/build-starrocks-2"
export build_starrocks_ver='2.5.0'

# 将编译好的FE、BE、Broker文件移动到打包目录
mv /root/starrocks-main/output/fe ${build_starrocks_dir}/
mv /root/starrocks-main/output/be ${build_starrocks_dir}/
mv /root/starrocks-main/fs_brokers/apache_hdfs_broker/output/apache_hdfs_broker ${build_starrocks_dir}/

# 构建FE
docker build --no-cache --progress=plain -f ./starrocks-fe.dockerfile -t renzicu/starrocks-fe:${build_starrocks_ver} .

# 构建BE
# 机器CPU支持AVX2
docker build --no-cache --progress=plain -f ./starrocks-be.dockerfile -t renzicu/starrocks-be:${build_starrocks_ver} .
# 机器CPU不支持AVX2
docker build --no-cache --progress=plain -f ./starrocks-be.dockerfile -t renzicu/starrocks-be-noavx:${build_starrocks_ver} .

# 构建Broker
docker build --no-cache --progress=plain -f ./starrocks-broker.dockerfile -t renzicu/starrocks-broker:${build_starrocks_ver} .

# 推送镜像示例
# docker login -u renzicu -p xxxxxxxxxxx
docker push renzicu/starrocks-be-noavx:${build_starrocks_ver}
分享到:
本文链接:https://blog.renzicu.com/2022/build-starrocks/index.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 许可协议。转载请注明出处!
THE END
二维码
打赏
文章目录
关闭
目 录