使用 Docker 开发镜像编译

下载镜像

docker pull apache/incubator-doris:build-env-1.2

截止目前(2021年9月3日09:58:12)最新的release版本是doris 0.14.0 ,doris 0.14.0 版本仍然使用apache/incubator-doris:build-env-1.2 编译。

在本地下载源码(非容器内)

$ mkdir -p /data/software/doris/src
$ cd /data/software/doris/src
$ git clone https://github.com/apache/incubator-doris.git

或者下载清华大学的国内镜像(很快,但是要指定版本路径):
https://mirrors.tuna.tsinghua.edu.cn/apache/incubator/doris/0.14.0-incubating/apache-doris-0.14.0-incubating-src.tar.gz

如果这个下载过程出现错误,那就多试几次:
Apache Doris 0.14.0 编译部署安装过程记录_apache

进入docker容器

这里将我自己的maven环境和下载的Doris源码挂载到宿主机目录,以防止每次启动镜像编译时,重复下载 maven 的依赖库,这也是官网推荐的:

docker run -it -v /data/software/apache-maven-3.6.3/conf:/root/.m2 \
-v /data/software/doris/src/apache-doris/:/root/incubator-doris-DORIS-0.14.0-release/ \
-v /data/software/apache-maven-3.6.3/repo:/data/software/apache-maven-3.6.3/repo \
apache/incubator-doris:build-env-1.2

注意:

  1. 我的settings.xml在/data/software/apache-maven-3.6.3/conf下
  2. 我的本地maven仓库地址是/data/software/apache-maven-3.6.3/repo
  3. 所以将以上两个目录都映射到容器内。

官网是这样写的

$ docker run -it -v /your/local/.m2:/root/.m2 \
-v /your/local/incubator-doris-DORIS-x.x.x-release/:/root/incubator-doris-DORIS-x.x.x-release/ \
apache/incubator-doris:build-env-1.3.1

这里只需将settings.xml所在的目录映射过去即可。

然后就进入了容器内。

退出容器: exit
再次进入该容器:
docker exec -it 容器ID /bin/bash

编译

cd incubator-doris-DORIS-0.14.0-release
sh build.sh

编译过程很漫长,下载依赖取决于网速,我的测试环境,编译了大概有一个多小时吧。
Apache Doris 0.14.0 编译部署安装过程记录_数据_02

直到这里就算编译结束了:

Successfully build Doris

Apache Doris 0.14.0 编译部署安装过程记录_apache_03
编译完成后,产出文件在 output/ 目录中。

安装部署

部署前提

Doris 作为一款开源的 MPP 架构 OLAP 数据库,能够运行在绝大多数主流的商用服务器上。为了能够充分运用 MPP 架构的并发优势,以及 Doris 的高可用特性,我们建议 Doris 的部署遵循以下需求:

Linux 操作系统版本需求

Linux 系统 版本
CentOS 7.1 及以上
Ubuntu 16.04 及以上

软件需求

软件 版本
Java 1.8 及以上
GCC 4.8.2 及以上

开发测试环境

模块 CPU 内存 磁盘 网络 实例数量
Frontend 8核+ 8GB+ SSD 或 SATA,10GB+ * 千兆网卡 1
Backend 8核+ 16GB+ SSD 或 SATA,50GB+ * 千兆网卡 1-3 *

生产环境

模块 CPU 内存 磁盘 网络 实例数量(最低要求)
Frontend 16核+ 64GB+ SSD 或 RAID 卡,100GB+ * 万兆网卡 1-5 *
Backend 16核+ 64GB+ SSD 或 SATA,100G+ * 万兆网卡 10-100 *

注1:

  1. FE 的磁盘空间主要用于存储元数据,包括日志和 image。通常从几百 MB 到几个 GB 不等。
  2. BE 的磁盘空间主要用于存放用户数据,总磁盘空间按用户总数据量 * 3(3副本)计算,然后再预留额外 40% 的空间用作后台 compaction 以及一些中间数据的存放。
  3. 一台机器上可以部署多个 BE 实例,但是只能部署一个 FE。如果需要 3 副本数据,那么至少需要 3 台机器各部署一个 BE 实例(而不是1台机器部署3个BE实例)。多个FE所在服务器的时钟必须保持一致(允许最多5秒的时钟偏差
  4. 测试环境也可以仅适用一个 BE 进行测试。实际生产环境,BE 实例数量直接决定了整体查询延迟。
  5. 所有部署节点关闭 Swap。

注2:FE 节点的数量

  1. FE 角色分为 Follower 和 Observer,(Leader 为 Follower 组中选举出来的一种角色,以下统称 Follower,具体含义见 元数据设计文档)。
  2. FE 节点数据至少为1(1 个 Follower)。当部署 1 个 Follower 和 1 个 Observer 时,可以实现读高可用。当部署 3 个 Follower 时,可以实现读写高可用(HA)。
  3. Follower 的数量必须为奇数,Observer 数量随意。
  4. 根据以往经验,当集群可用性要求很高是(比如提供在线业务),可以部署 3 个 Follower 和 1-3 个 Observer。如果是离线业务,建议部署 1 个 Follower 和 1-3 个 Observer。

Broker 部署

Broker 是用于访问外部数据源(如 hdfs)的进程。通常,在每台机器上部署一个 broker 实例即可。

网络需求

Doris 各个实例直接通过网络进行通讯。以下表格展示了所有需要的端口

实例名称 端口名称 默认端口 通讯方向 说明
BE be_port 9060 FE --> BE BE 上 thrift server 的端口,用于接收来自 FE 的请求
BE webserver_port 8040 BE <–> BE BE 上的 http server 的端口
BE heartbeat_service_port 9050 FE --> BE BE 上心跳服务端口(thrift),用于接收来自 FE 的心跳
BE brpc_port* 8060 FE<–>BE, BE <–> BE BE 上的 brpc 端口,用于 BE 之间通讯
FE http_port * 8030 FE <–> FE,用户 FE 上的 http server 端口
FE rpc_port 9020 BE --> FE, FE <–> FE FE 上的 thrift server 端口,每个fe的配置需要保持一致
FE query_port 9030 用户 FE 上的 mysql server 端口
FE edit_log_port 9010 FE <–> FE FE 上的 bdbje 之间通信用的端口
Broker broker_ipc_port 8000 FE --> Broker, BE --> Broker Broker 上的 thrift server,用于接收请求

注:

  1. 当部署多个 FE 实例时,要保证 FE 的 http_port 配置相同。
  2. 部署前请确保各个端口在应有方向上的访问权限。

FE 部署

目前部署cdh05~cdh07服务器上:
因为是测试环境,所以我们部署1个FE,3个BE。

cdh05 cdh06 cdh07
FE、BE BE BE

FE部署

在cdh05上创建文件夹:

/data/software/doris 

将编译完的output/ 下的be目录拷贝至该目录下。

配置 FE

  1. 配置文件为 conf/fe.conf。其中注意:meta_dir:元数据存放位置。默认在 fe/doris-meta/ 下。需手动创建该目录
    注意:生产环境强烈建议单独指定目录不要放在Doris安装目录下,最好是单独的磁盘(如果有SSD最好),测试开发环境可以使用默认配置

  2. fe.confJAVA_OPTS 默认 java 最大堆内存为 4GB,建议生产环境调整至 8G 以上。

启动FE

sh bin/start_fe.sh --daemon

FE进程启动进入后台执行。日志默认存放在 fe/log/ 目录下。如启动失败,可以通过查看 fe/log/fe.log 或者 fe/log/fe.out 查看错误信息。