Chiriri's blog Chiriri's blog
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)

Iekr

苦逼后端开发
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)
  • Hadoop

  • Zookeeper

  • Hive

  • Flume

  • Kafka

  • Azkaban

  • Hbase

  • Scala

  • Spark

  • Flink

  • 离线数仓

  • 青训营

  • DolphinScheduler

  • Doris

    • Doris 概述
    • 编译与安装
      • 使用 Docker 开发镜像编译
        • 注意事项
        • 默认端口
      • 集群部署
        • 部署 FE 节点
        • 配置 BE 节点
        • 在 FE 中添加所有 BE 节点
        • 启动 BE
        • Doris 集群群起脚本
        • 部署 FS_Broker(可选)
      • 扩容和缩容
        • FE 扩容和缩容
        • BE 扩容和缩容
        • Broker 扩容缩容
    • 数据表的创建
  • 大数据
  • Doris
Iekr
2023-11-19
目录

编译与安装

# 编译与安装

安装 Doris,需要先通过源码编译,主要有两种方式:使用 Docker 开发镜像编译(推 荐)、直接编译。 直接编译的方式,可以参考官网:https://doris.apache.org/zh-CN/installing/compilation.html

# 使用 Docker 开发镜像编译

通过 wget 下载(或者手动上传下载好的压缩包)。

wget https://dist.apache.org/repos/dist/dev/incubator/doris/0.15/0.15.
0-rc04/doris-1.1.1-incubating-src.tar.gz
1
2

解压到 /opt/software/ 并拉取镜像

tar -zxvf  doris-1.1.1-incubating-src.tar.gz  -C /opt/software
docker pull apache/incubator-doris:build-env-for-0.15.0
1
2

运行

docker run -it \
-v /opt/software/.m2:/root/.m2 \
-v /opt/software/doris-1.1.1-incubating-src/:/root/apache-
doris-0.15.0-incubating-src/ \
apache/incubator-doris:build-env-for-0.15.0
1
2
3
4
5

在镜像内切换到 JDK8

alternatives --set java java-1.8.0-openjdk.x86_64
alternatives --set javac java-1.8.0-openjdk.x86_64
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
1
2
3

通过指定 Maven 阿里云镜像仓库来加速下载依赖,修改 fe 下的 pom

vim /opt/software/doris-1.1.1-incubating-src/fe/pom.xml
1

在 <repositories> 标签下添加:

<repository>
    <id>aliyun</id>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
1
2
3
4

同样修改 be 下的 pom

vim /opt/software/doris-1.1.1-incubating-src/be/pom.xml
1
<repository>
    <id>aliyun</id>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
1
2
3
4

编译

sh build.sh
1

如果是第一次使用 build-env-for-0.15.0 或之后的版本,第一次编译的时候要使用如下命令:

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

因为 build-env-for-0.15.0 版本镜像升级了 thrift (0.9 -> 0.13),需要通过 --clean 命令强制使用新版本的 thrift 生成代码文件,否则会出现不兼容的代码。

# 注意事项

  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。
  6. FE 节点数据至少为 1(1 个 Follower)。当部署 1 个 Follower 和 1 个 Observer 时,可以实现读高可用。当部署 3 个 Follower 时,可以实现读写高可用(HA)。
  7. Follower 的数量必须为奇数,Observer 数量随意。
  8. 根据以往经验,当集群可用性要求很高时(比如提供在线业务),可以部署 3 个 Follower 和 1-3 个 Observer。如果是离线业务,建议部署 1 个 Follower 和 1-3 个 Observer。
  9. Broker 是用于访问外部数据源(如 HDFS)的进程。通常,在每台机器上部署一个 broker 实例即可。

# 默认端口

实例名称 端口名称 默认端口 通讯方向 说明
BE be_prot 9060 FE-->BE BE 上 thrift server 的端口用于接收来自 FE 的请求
BE webserver_port 8040 BE<-->FE BE 上的 http server 端口
BE heartbeat_service_port 9050 FE-->BE BE 上心跳服务端口用于接收来自 FE 的心跳
BE brpc_prot 8060 FE<-->BE
BE<-->BE
BE 上的 brpc 端口用于 BE 之间通信
FE http_port 8030 FE<-->FE
用户 <--> FE
FE 上的 http_server 端口
FE rpc_port 9020 BE-->FE
FE<-->FE
FE 上 thirt server 端口号
FE query_port 9030 用户 <--> FE 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 配置相同。 部署前请确保各个端口在应有方向上的访问权限。

# 集群部署

主机 1 主机 2 主机 3
FE(LEADER) FE(FOLLOWER) FE(OBSERVER)
BE BE BE
BROKER BROKER BROKER

生产环境建议 FE 和 BE 分开。

下载安装包

wget https://dist.apache.org/repos/dist/release/doris/1.1/1.1.1-rc03/apache-doris-1.1.1-bin-x86.tar.gz
1

创建目录并拷贝编译后的文件

tar -zxvf apache-doris-1.1.1-bin-x86.tar.gz -C /opt/module
cd /opt/module
mv apache-doris-1.1.1-bin-x86 doris-1.1.1
cd doris-1.1.1
1
2
3
4

设置系统最大打开文件句柄数(每个节点)

sudo vim /etc/security/limits.conf
1
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 65536
1
2
3
4

重启永久生效,也可以用 ulimit -n 65535 临时生效。

# 部署 FE 节点

创建 fe 元数据存储的目录

mkdir /opt/module/doris-1.1.1/doris-meta
1

修改 fe 的配置文件

vim /opt/module/doris-1.1.1/fe/conf/fe.conf
1
#配置文件中指定元数据路径:
meta_dir = /opt/module/doris-1.1.1/doris-meta
#修改绑定 ip(每台机器修改成自己的 ip)
priority_networks = 192.168.8.101/24
1
2
3
4
  • 生产环境强烈建议单独指定目录不要放在 Doris 安装目录下,最好是单独的磁盘(如果有 SSD 最好)。
  • 如果机器有多个 ip, 比如内网外网,虚拟机 docker 等,需要进行 ip 绑定,才能正确识别。
  • JAVA_OPTS 默认 java 最大堆内存为 4GB,建议生产环境调整至 8G 以上。

启动 hadoop1 的 FE

/opt/module/doris-1.1.1/fe/bin/start_fe.sh --daemon
1

# 配置 BE 节点

分发 BE

scp -r /opt/module/doris-1.1.1/be hadoop163:/opt/module
scp -r /opt/module/doris-1.1.1/be hadoop164:/opt/module
1
2

创建 BE 数据存放目录(每个节点)

mkdir /opt/module/doris-1.1.1/doris-storage1
mkdir /opt/module/doris-1.1.1/doris-storage2.SSD
1
2

修改 BE 的配置文件(每个节点)

vim /opt/module/doris-1.1.1/be/conf/be.conf
1
#配置文件中指定数据存放路径:
storage_root_path  =  /opt/module/doris-1.1.1/doris-storage1;/opt/module/doris-1.1.1/doris-storage2
#修改绑定 ip(每台机器修改成自己的 ip)
priority_networks = 192.168.8.101/24
1
2
3
4
  • storage_root_path 默认在 be/storage 下,需要手动创建该目录。多个路径之间使用英文状态的分号;分隔(最后一个目录后不要加)。

  • 可以通过路径区别存储目录的介质,HDD 或 SSD。可以添加容量限制在每个路径的末尾,通过英文状态逗号,隔开,如:

    storage_root_path=/home/disk1/doris.HDD,50;/home/disk2/doris.SSD,10;/home/disk2/doris
    # /home/disk1/doris.HDD,50,表示存储限制为 50GB,HDD;
    # /home/disk2/doris.SSD,10,存储限制为 10GB,SSD;
    # /home/disk2/doris,存储限制为磁盘最大容量,默认为 HDD
    
    1
    2
    3
    4
  • 如果机器有多个 IP, 比如内网外网,虚拟机 docker 等,需要进行 IP 绑定,才能正确识别。

# 在 FE 中添加所有 BE 节点

BE 节点需要先在 FE 中添加,才可加入集群。可以使用 mysql-client 连接到 FE。

安装 MySQL Client

mkdir /opt/software/mysql-client/
1

上传相关以下三个 rpm 包到 /opt/software/mysql-client/

  • mysql-community-client-5.7.28-1.el7.x86_64.rpm
  • mysql-community-common-5.7.28-1.el7.x86_64.rpm
  • mysql-community-libs-5.7.28-1.el7.x86_64.rpm

卸载 mariadb

sudo rpm -qa|grep mariadb
#如果存在,先卸载
sudo rpm -e --nodeps mariadb mariadb-libs mariadb-server
1
2
3

安装

rpm -ivh /opt/software/mysql-client/*
1

使用 MySQL Client 连接 FE

mysql -h hadoop1 -P 9030 -uroot
1

修改密码

SET PASSWORD FOR 'root' = PASSWORD('000000');
1

添加 BE

ALTER SYSTEM ADD BACKEND "hadoop162:9050";
ALTER SYSTEM ADD BACKEND "hadoop163:9050";
ALTER SYSTEM ADD BACKEND "hadoop164:9050";
1
2
3

查看 BE 状态

SHOW PROC '/backends';
1

# 启动 BE

启动 BE(每个节点)

/opt/module/doris-1.1.1/be/bin/start_be.sh --daemon
1

查看 BE 状态

mysql -h hadoop1 -P 9030 -uroot -p
SHOW PROC '/backends';
1
2

Alive 为 true 表示该 BE 节点存活。

# Doris 集群群起脚本

#!/bin/bash
case $1 in
    "start")
        for host in hadoop162 hadoop163 hadoop164 ; do
            echo "========== 在 $host 上启动 fe  ========="
            ssh $host "source /etc/profile; /opt/module/doris-1.1.1/fe/bin/start_fe.sh --daemon"
        done
        for host in hadoop162 hadoop163 hadoop164 ; do
            echo "========== 在 $host 上启动 be  ========="
            ssh $host "source /etc/profile; /opt/module/doris-1.1.1/be/bin/start_be.sh --daemon"
        done

       ;;
    "stop")
            for host in hadoop162 hadoop163 hadoop164 ; do
                echo "========== 在 $host 上停止 fe  ========="
                ssh $host "source /etc/profile; /opt/module/doris-1.1.1/fe/bin/stop_fe.sh "
            done
            for host in hadoop162 hadoop163 hadoop164 ; do
                echo "========== 在 $host 上停止 be  ========="
                ssh $host "source /etc/profile; /opt/module/doris-1.1.1/be/bin/stop_be.sh "
            done

           ;;

    *)
        echo "你启动的姿势不对"
        echo "  start   启动doris集群"
        echo "  stop    停止stop集群"

    ;;
esac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 部署 FS_Broker(可选)

Broker 以插件的形式,独立于 Doris 部署。如果需要从第三方存储系统导入数据,需要部署相应的 Broker,默认提供了读取 HDFS、百度云 BOS 及 Amazon S3 的 fs_broker。fs_broker 是无状态的,建议每一个 FE 和 BE 节点都部署一个 Broker。

编译 FS_BROKER 并拷贝文件,进入源码目录下的 fs_brokers 目录,使用 sh build.sh 进行编译,拷贝源码 fs_broker 的 output 目录下的相应 Broker 目录到需要部署的所有节点上,改名为: apache_hdfs_broker 。建议和 BE 或者 FE 目录保持同级。

启动 Broker

/opt/module/doris-1.1.1/apache_hdfs_broker/bin/start_broker.sh --daemon
1

添加 Broker,要让 Doris 的 FE 和 BE 知道 Broker 在哪些节点上,通过 sql 命令添加 Broker 节点列表。

mysql -h hadoop1 -P 9030 -uroot -p
1
ALTER  SYSTEM  ADD  BROKER  broker_name "hadoop162:8000","hadoop163:8000","hadoop164:8000";
1

其中 broker_host 为 Broker 所在节点 ip; broker_ipc_port 在 Broker 配置文件中的 conf/apache_hdfs_broker.conf 。

查看 Broker 状态

SHOW PROC "/brokers";
1

# 扩容和缩容

Doris 可以很方便的扩容和缩容 FE、BE、Broker 实例。

# FE 扩容和缩容

可以通过将 FE 扩容至 3 个以上节点来实现 FE 的高可用。

使用 sql 命令查看 FE 状态

mysql -h hadoop1 -P 9030 -uroot -p
1
SHOW PROC '/frontends';
1

也可以通过页面访问进行监控,访问 8030,账户为 root,密码默认为空不用填写

增加 FE 节点

FE 分为 Leader,Follower 和 Observer 三种角色。 默认一个集群,只能有一个 Leader,可以有多个 Follower 和 Observer。其中 Leader 和 Follower 组成一个 Paxos 选择组,如果 Leader 宕机,则剩下的 Follower 会自动选出新的 Leader,保证写入高可用。Observer 同步 Leader 的数据,但是不参加选举。

如果只部署一个 FE,则 FE 默认就是 Leader。在此基础上,可以添加若干 Follower 和 Observer。

ALTER SYSTEM ADD FOLLOWER "hadoop163:9010";
ALTER SYSTEM ADD OBSERVER "hadoop164:9010";
1
2

分发 FE,修改 FE 的配置

scp -r /opt/module/doris-1.1.1/fe hadoop163:/opt/module/doris-1.1.1
scp -r /opt/module/doris-1.1.1/fe hadoop164:/opt/module/doris-1.1.1
1
2

在 hadoop163 启动 Follower

/opt/module/doris-1.1.1/fe/bin/start_fe.sh  --helper hadoop162:9010 --daemon
1

在 hadoop164 启动 Observer

/opt/module/doris-1.1.1/fe/bin/start_fe.sh  --helper hadoop162:9010 --daemon
1

使用 mysql-client 连接到任一已启动的 FE。

SHOW PROC '/frontends';
1

删除 FE 节点命令

ALTER SYSTEM DROP FOLLOWER[OBSERVER] "fe_host:edit_log_port";
1

删除 Follower FE 时,确保最终剩余的 Follower(包括 Leader)节点为奇数。

# BE 扩容和缩容

增加 BE 节点

ALTER SYSTEM ADD BACKEND;
1

DROP 方式删除 BE 节点(不推荐)

ALTER SYSTEM DROP BACKEND "be_host:be_heartbeat_service_port";
1

注意:DROP BACKEND 会直接删除该 BE,并且其上的数据将不能再恢复!!!所以我们强烈不推荐使用 DROP BACKEND 这种方式删除 BE 节点。当你使用这个语句时,会有对应的防误操作提示。

DECOMMISSION 方式删除 BE 节点(推荐)

ALTER  SYSTEM  DECOMMISSION  BACKEND "be_host:be_heartbeat_service_port";
1
  • 该命令用于安全删除 BE 节点。命令下发后,Doris 会尝试将该 BE 上的数据向其他 BE 节点迁移,当所有数据都迁移完成后,Doris 会自动删除该节点。
  • 该命令是一个异步操作。执行后,可以通过 SHOW PROC '/backends'; 看到该 BE 节点的 isDecommission 状态为 true。表示该节点正在进行下线。
  • 该命令不一定执行成功。比如剩余 BE 存储空间不足以容纳下线 BE 上的数据,或者剩余机器数量不满足最小副本数时,该命令都无法完成,并且 BE 会一直处于 isDecommission 为 true 的状态。
  • DECOMMISSION 的进度,可以通过 SHOW PROC '/backends'; 中的 TabletNum 查看,如果正在进行,TabletNum 将不断减少。
  • 该操作可以通过如下命令取消: CANCEL DECOMMISSION BACKEND "be_host:be_heartbeat_service_port"; 取消后,该 BE 上的数据将维持当前剩余的数据量。后续 Doris 重新进行负载均衡。

# Broker 扩容缩容

Broker 实例的数量没有硬性要求。通常每台物理机部署一个即可。Broker 的添加和删除可以通过以下命令完成:

ALTER SYSTEM ADD BROKER broker_name "broker_host:broker_ipc_port";
ALTER SYSTEM DROP BROKER broker_name "broker_host:broker_ipc_port";
ALTER SYSTEM DROP ALL BROKER broker_name;
1
2
3

Broker 是无状态的进程,可以随意启停。当然,停止后,正在其上运行的作业会失败, 重试即可。

编辑 (opens new window)
上次更新: 2023/12/06, 01:31:48
Doris 概述
数据表的创建

← Doris 概述 数据表的创建→

最近更新
01
k8s
06-06
02
进程与线程
03-04
03
计算机操作系统概述
02-26
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Iekr | Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式