由于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. 环境准备
- 一台可以运行Docker的宿主机,并且可以访问外网
- 最低配置:内存4G,CPU 4核,磁盘空间10G
- 在root账户下操作
2. 确保宿主机已经安装Docker并启动服务
centos 用户可以通过以下命令安装和启动 docker:
1 | yum -y install docker-io |
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 | docker ps :列出所有运行中容器 |