使用Docker镜像进行Doris源码编译

由于Druid对SQL join支持并不友好,而线上项目需要类似于Druid这样一款OLAP引擎,而我之前就调研过Baidu Doris,Doris现已进入Apache基金会孵化器,本文讲述使用Docker镜像进行Doris的源码编译。

在进行源码编译前,先简单介绍一下Doris,Doris原名Palo,是百度自研发的一款MPP的OLAP系统,主要整合了Google Mesa(数据模型),Apache Impala(MPP Query Engine)和Apache ORCFile (存储格式,编码和压缩) 的技术。有想进一步了解Doris的小伙伴可点击这里

下面开始进行Doris源码的编译。

1. 环境准备

  1. 一台可以运行Docker的宿主机,并且可以访问外网
  2. 最低配置:内存4G,CPU 4核,磁盘空间10G
  3. 在root账户下操作

2. 确保宿主机已经安装Docker并启动服务

centos 用户可以通过以下命令安装和启动 docker:

1
2
3
yum -y install docker-io

service docker start

3. 创建Docker镜像

3.1 假设工作目录为 /use/local/dockerfile

下载 Dockerfile 到工作目录:

1
wget https://github.com/apache/incubator-doris/blob/master/docker/Dockerfile -O /use/local/dockerfile/

3.2 构建镜像

1
cd /use/local/dockerfile && docker build -t doris-dev:v1.0 .

doris-dev:v1.0 为镜像名称和版本,可自定义

说明:根据宿主机性能,镜像构建时间可能在几十分钟到1小时不等。推荐使用nohup命令进行镜像的构建,以防止终端退出而构建失败。构建完成后,可通过 docker images 命令查看镜像,大小约为3.5G。

注:如果你不想自己创建Docker镜像或者环境不允许,可以通过如下命令下载Baidu提供的镜像:

1
docker pull apachedoris/doris-dev:build-env

4. 进行源码编译

4.1 下载Doris源码

如果宿主机安装了git,可使用如下命令进行下载:

1
git clone https://github.com/apache/incubator-doris.git /usr/local/incubator-doris/

如果宿主机未安装git,可以去Doris官网下载地址进行下载。

4.2 启动并进入docker容器

1
docker run -it --name doris-dev-test -v /usr/local/incubator-doris/:/var/local/incubator-doris/ doris-dev:v1.0

说明:该命令启动并进入了一个名为 doris-dev-test 的容器,通过 -v 参数将宿主机/usr/local/incubator-doris/ 映射到容器内路径 /var/local/incubator-doris/。

4.3 现在你应该位于docker容器内了,进入到build.sh目录执行命令进行源码编译

1
cd /var/local/incubator-doris/

通过以下命令编译Doris FE 和 BE:

1
sh build.sh --fe --be --clean

注:如果你的宿主机配置较低,建议将 build.sh 中的 PARALLEL 参数调整为 4 或更低,防止编译过程中内存不足导致编译失败。编译完成后,最终的部署文件将产出到 output 目录下。

通过以下命令编译fs_broker (可选):

1
cd fs_brokers/apache_hdfs_broker/ && sh build.sh

4.4 退出容器

退出并保持容器继续运行:ctrl + pq

退出并终止容器:ctrl + d

4.5 拷贝容器中的文件到宿主机

1
docker cp containerID:/var/local/incubator-doris/output/ /path/to/your/host/

containerID为容器的ID,可以通过 docker ps -l 查看,/var/local/incubator-doris/output/为容器内目录,/path/to/your/host/ 为宿主机目录。

至此Doris源码编译完成。

附录:Docker常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
docker ps :列出所有运行中容器
docker ps -a :列出所有容器,包含沉睡镜像
docker ps -l :仅列出最新创建的一个容器
docker kill containerID :杀死某个容器
docker rm containerID :删除某个容器
docker rmi docker images -q :删除所有镜像
docker stop $(docker ps -q) :停用全部运行中的容器
docker rm $(docker ps -aq) :删除全部容器
一条命令实现停用并删除容器:
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
按条件删除镜像:
1.没有打标签
docker rmi docker images -q | awk '/^<none>/ { print $3 }'
2.指定标签
docker rmi docker images -q | awk '/^<none>/ { print $3 }'
3.镜像名包含关键字doss-api
docker rmi --force docker images | grep doss-api | awk '{print $3}'
4.组合
docker rmi $(docker images | grep v1.11.2 | awk ‘{ print $2, $3 }’)
坚持原创技术分享,您的支持将鼓励我继续创作!

------本文结束 感谢您的阅读------