使用 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
如果这个下载过程出现错误,那就多试几次:
进入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
注意:
- 我的settings.xml在/data/software/apache-maven-3.6.3/conf下
- 我的本地maven仓库地址是/data/software/apache-maven-3.6.3/repo
- 所以将以上两个目录都映射到容器内。
官网是这样写的
$ 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
编译过程很漫长,下载依赖取决于网速,我的测试环境,编译了大概有一个多小时吧。
直到这里就算编译结束了:
Successfully build Doris
编译完成后,产出文件在 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:
- FE 的磁盘空间主要用于存储元数据,包括日志和 image。通常从几百 MB 到几个 GB 不等。
- BE 的磁盘空间主要用于存放用户数据,总磁盘空间按用户总数据量 * 3(3副本)计算,然后再预留额外 40% 的空间用作后台 compaction 以及一些中间数据的存放。
- 一台机器上可以部署多个 BE 实例,但是只能部署一个 FE。如果需要 3 副本数据,那么至少需要 3 台机器各部署一个 BE 实例(而不是1台机器部署3个BE实例)。多个FE所在服务器的时钟必须保持一致(允许最多5秒的时钟偏差
)- 测试环境也可以仅适用一个 BE 进行测试。实际生产环境,BE 实例数量直接决定了整体查询延迟。
- 所有部署节点关闭 Swap。
注2:FE 节点的数量
- FE 角色分为 Follower 和 Observer,(Leader 为 Follower 组中选举出来的一种角色,以下统称 Follower,具体含义见 元数据设计文档)。
- FE 节点数据至少为1(1 个 Follower)。当部署 1 个 Follower 和 1 个 Observer 时,可以实现读高可用。当部署 3 个 Follower 时,可以实现读写高可用(HA)。
- Follower 的数量必须为奇数,Observer 数量随意。
- 根据以往经验,当集群可用性要求很高是(比如提供在线业务),可以部署 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,用于接收请求 |
注:
- 当部署多个 FE 实例时,要保证 FE 的 http_port 配置相同。
- 部署前请确保各个端口在应有方向上的访问权限。
FE 部署
目前部署cdh05~cdh07服务器上:
因为是测试环境,所以我们部署1个FE,3个BE。
cdh05 | cdh06 | cdh07 |
---|---|---|
FE、BE | BE | BE |
FE部署
在cdh05上创建文件夹:
/data/software/doris
将编译完的output/
下的be
目录拷贝至该目录下。
配置 FE
-
配置文件为 conf/fe.conf。其中注意:
meta_dir
:元数据存放位置。默认在 fe/doris-meta/ 下。需手动创建该目录。
注意:生产环境强烈建议单独指定目录不要放在Doris安装目录下,最好是单独的磁盘(如果有SSD最好),测试开发环境可以使用默认配置 -
fe.conf
中JAVA_OPTS
默认java
最大堆内存为 4GB,建议生产环境调整至 8G 以上。
启动FE
sh bin/start_fe.sh --daemon
FE进程启动进入后台执行。日志默认存放在 fe/log/ 目录下。如启动失败,可以通过查看 fe/log/fe.log 或者 fe/log/fe.out 查看错误信息。