• Doris学习笔记之介绍、编译安装与部署


    介绍

    概述

    Apache Doris由百度大数据部研发(之前叫百度Palo,2018年贡献到Apache社区后,更名为Doris ),在百度内部,有超过200个产品线在使用,部署机器超过1000台,单一业务最大可达到上百TB。
    Apache Doris是一个现代化的MPP(Massively Parallel Processing,即大规模并行处理)分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。
    Apache Doris的分布式架构非常简洁,易于运维,并且可以支持10PB以上的超大数据集。Apache Doris可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。
    在这里插入图片描述
    在这里插入图片描述

    架构

    在这里插入图片描述
    Doris的架构很简洁,只设FE(Frontend)、BE(Backend)两种角色、两个进程,不依赖于外部组件,方便部署和运维,FE、BE都可线性扩展。

    FE (Frontend)

    FE负责存储、维护集群元数据;负责接收、解析查询请求,规划查询计划,调度查询执行,返回查询结果。主要有三个角色:
    (1)Leader和Follower:主要是用来达到元数据的高可用,保证单节点宕机的情况下,元数据能够实时地在线恢复,而不影响整个服务。
    (2)Observer:用来扩展查询节点,同时起到元数据备份的作用。如果在发现集群压力非常大的情况下,需要去扩展整个查询的能力,那么可以加observer的节点。observer 不参与任何的写入,只参与读取。

    BE (Backend)

    BE负责 物理数据 的存储和计算;依据FE生成的物理计划,分布式地执行查询。数据的可靠性由BE保证,BE会对整个数据存储多副本或者是三副本。副本数可根据需求动态调整。

    MySQL Client

    Doris借助MySQL协议,用户使用任意MySQL的ODBC/JDBC以及MySQL的客户端,都可以直接访问Doris。

    Broker

    Broker为一个独立的无状态进程。封装了文件系统接口,提供Doris读取远端存储系统中文件的能力,包括HDFS,S3,BOS等。

    编译安装

    环境:CentOS7,jdk8,python2,gcc7.5.0

    安装docker

    确保python版本是python2:

    [root@scentos szc]# python -V
    Python 2.7.5
    
    • 1
    • 2

    然后通过yum安装docker:

    [root@scentos szc]# yum update -y
    [root@scentos szc]# yum install -y yum-utils device-mapper-persistent-data lvm2
    [root@scentos szc]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    [root@scentos szc]# yum install docker-ce -y
    
    • 1
    • 2
    • 3
    • 4

    启动docker并设置为开机启动:

    [root@scentos szc]# systemctl start docker && systemctl enable docker
    
    • 1

    查看docker版本:

    [root@scentos szc]# docker version
    Client: Docker Engine - Community
    Version:           20.10.16
    API version:       1.41
    Go version:        go1.17.10
    Git commit:        aa7e414
    Built:             Thu May 12 09:19:45 2022
    OS/Arch:           linux/amd64
    Context:           default
    Experimental:      true
    
    Server: Docker Engine - Community
    Engine:
      Version:          20.10.16
      API version:      1.41 (minimum version 1.12)
      Go version:       go1.17.10
      Git commit:       f756502
      Built:            Thu May 12 09:18:08 2022
      OS/Arch:          linux/amd64
      Experimental:     false
    containerd:
      Version:          1.6.4
      GitCommit:        212e8b6fa2f44b9c21b2798135fc6fb7c53efc16
    runc:
      Version:          1.1.1
      GitCommit:        v1.1.1-0-g52de29d
    docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0
    
    • 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

    通过docker编译

    第一步,下载源码并解压:

    [root@scentos szc]# wget http://archive.apache.org/dist/incubator/doris/0.15.0-incubating/apache-doris-0.15.0-incubating-src.tar.gz
    [root@scentos szc]# tar -zxvf apache-doris-0.15.0-incubating-src.tar.gz
    
    • 1
    • 2

    第二步,通过docker拉取镜像:

    [root@scentos szc]# docker pull apache/incubator-doris:build-env-for-0.15.0
    
    • 1

    第三步,通过docker运行doris镜像,并指定挂载目录:

    [root@scentos apache-maven-3.8.5]# docker run -it -v /root/.m2:/root/.m2 -v /home/szc/apache-doris-0.15.0-incubating-src/:/root/apache-doris-0.15.0-incubating-src/ apache/incubator-doris:build-env-for-0.15.0
    
    • 1

    第四步,修改apache-doris-0.15.0-incubating-src/vim fe/pom.xml文件,在标签里,添加阿里仓库:

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

    最后,切换jdk8,编译doris:

    [root@8122c5f919fe apache-doris-0.15.0-incubating-src]# alternatives --set java java-1.8.0-openjdk.x86_64
    [root@8122c5f919fe apache-doris-0.15.0-incubating-src]# alternatives --set javac java-1.8.0-openjdk.x86_64
    [root@8122c5f919fe apache-doris-0.15.0-incubating-src]# export JAVA_HOME=/usr/lib/jvm/java-1.8.0
    [root@8122c5f919fe apache-doris-0.15.0-incubating-src]# ./build.sh --clean --be --fe --ui
    
    • 1
    • 2
    • 3
    • 4

    编译后的结果如下:
    在这里插入图片描述
    在挂载的宿主机CentOS7目录里,会出现output目录:
    在这里插入图片描述
    将output目录拷贝出来即可:

    [root@scentos apache-doris-0.15.0-incubating-src]# cp -r output/ ../doris-0.15.0/
    [root@scentos apache-doris-0.15.0-incubating-src]# cd ..
    [root@scentos szc]# cd doris-0.15.0/
    
    • 1
    • 2
    • 3

    再修改可打开文件数,对应文件:/etc/security/limits.conf

    * soft nofile 65535
    * hard nofile 65535
    * soft nproc 65535
    * hard nproc 65535
    
    • 1
    • 2
    • 3
    • 4

    重启生效

    部署注意事项

    (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实例即可。

    默认端口:
    在这里插入图片描述
    当部署多个FE实例时,要保证FE的http_port 配置相同。部署前请确保各个端口在应有方向上的访问权限。

    部署

    部署FE

    创建存放元数据的目录:

    [root@scentos doris-0.15.0]# mkdir doris-meta
    
    • 1

    修改配置文件:

    [root@scentos doris-0.15.0]# vim fe/conf/fe.conf
    
    • 1

    修改元数据目录路径和IP地址:

    meta_dir = /home/szc/doris-0.15.0/doris-meta
    .....
    priority_networks = 192.168.31.141/24
    
    • 1
    • 2
    • 3

    启动fe:

    [root@scentos doris-0.15.0]# fe/bin/start_fe.sh --daemon
    
    • 1

    部署BE

    创建两个数据存储目录:

    [root@scentos doris-0.15.0]# mkdir doris_storage1
    [root@scentos doris-0.15.0]# mkdir doris_storage2
    
    • 1
    • 2

    修改be配置文件:

    [root@scentos doris-0.15.0]# vim be/conf/be.conf
    
    • 1

    绑定IP,修改数据存储路径和存储介质:

    priority_networks = 192.168.31.141/24
    .....
    storage_root_path = storage_root_path = /home/szc/doris-0.15.0/doris_storage1,medium:SSD;/home/szc/doris-0.15.0/doris_storage2,medium:SSD
    
    • 1
    • 2
    • 3

    如果没有安装MySQL,需要安装,然后通过MySQL连接FE(首次登录无密码):

    [root@scentos szc]# mysql -h scentos -P 9030 -uroot
    
    • 1

    设置密码:

    mysql> SET PASSWORD FOR 'root' = PASSWORD('root');
    Query OK, 0 rows affected (0.06 sec)
    
    • 1
    • 2

    添加be:

    mysql> ALTER SYSTEM ADD BACKEND "scentos:9050";
    Query OK, 0 rows affected (0.06 sec)
    
    • 1
    • 2

    查看be状态:

    mysql> SHOW PROC '/backends';
    +-----------+-----------------+----------------+----------+---------------+--------+----------+----------+---------------+---------------+-------+----------------------+-----------------------+-----------+------------------+---------------+---------------+---------+----------------+--------------------------+--------------------------------------------------------------------+---------+----------------------------------------------------------------+
    | BackendId | Cluster         | IP             | HostName | HeartbeatPort | BePort | HttpPort | BrpcPort | LastStartTime | LastHeartbeat | Alive | SystemDecommissioned | ClusterDecommissioned | TabletNum | DataUsedCapacity | AvailCapacity | TotalCapacity | UsedPct | MaxDiskUsedPct | Tag                      | ErrMsg                                                             | Version | Status                                                         |
    +-----------+-----------------+----------------+----------+---------------+--------+----------+----------+---------------+---------------+-------+----------------------+-----------------------+-----------+------------------+---------------+---------------+---------+----------------+--------------------------+--------------------------------------------------------------------+---------+----------------------------------------------------------------+
    | 11001     | default_cluster | 192.168.31.141 | scentos  | 9050          | -1     | -1       | -1       | NULL          | NULL          | false | false                | false                 | 0         | 0.000            | 1.000 B       | 0.000         | 0.00 %  | 0.00 %         | {"location" : "default"} | java.net.ConnectException: Connection refused (Connection refused) |         | {"lastSuccessReportTabletsTime":"N/A","lastStreamLoadTime":-1} |
    +-----------+-----------------+----------------+----------+---------------+--------+----------+----------+---------------+---------------+-------+----------------------+-----------------------+-----------+------------------+---------------+---------------+---------+----------------+--------------------------+--------------------------------------------------------------------+---------+----------------------------------------------------------------+
    1 row in set (0.02 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    然后启动be:

    [root@scentos doris-0.15.0]# be/bin/start_be.sh --daemon
    
    • 1

    查看MySQL中的backends状态,其中Alive字段为true,表示be启动成功:

    mysql> SHOW PROC '/backends';
    +-----------+-----------------+----------------+----------+---------------+--------+----------+----------+---------------------+---------------------+-------+----------------------+-----------------------+-----------+------------------+---------------+---------------+---------+----------------+--------------------------+--------+---------------------+--------------------------------------------------------------------------------+
    | BackendId | Cluster         | IP             | HostName | HeartbeatPort | BePort | HttpPort | BrpcPort | LastStartTime       | LastHeartbeat       | Alive | SystemDecommissioned | ClusterDecommissioned | TabletNum | DataUsedCapacity | AvailCapacity | TotalCapacity | UsedPct | MaxDiskUsedPct | Tag                      | ErrMsg | Version             | Status                                                                         |
    +-----------+-----------------+----------------+----------+---------------+--------+----------+----------+---------------------+---------------------+-------+----------------------+-----------------------+-----------+------------------+---------------+---------------+---------+----------------+--------------------------+--------+---------------------+--------------------------------------------------------------------------------+
    | 10002     | default_cluster | 192.168.31.141 | scentos  | 9050          | 9060   | 8040     | 8060     | 2022-05-14 12:27:16 | 2022-05-14 12:27:22 | true  | false                | false                 | 0         | 0.000            | 219.981 GB    | 282.097 GB    | 22.02 % | 22.02 %        | {"location" : "default"} |        | 0.15.0-rc04-Unknown | {"lastSuccessReportTabletsTime":"2022-05-14 12:27:22","lastStreamLoadTime":-1} |
    +-----------+-----------------+----------------+----------+---------------+--------+----------+----------+---------------------+---------------------+-------+----------------------+-----------------------+-----------+------------------+---------------+---------------+---------+----------------+--------------------------+--------+---------------------+--------------------------------------------------------------------------------+
    1 row in set (0.01 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    FS_Broker

    首先需要编译Broker源码,在docker中进入fs_brokers/apache_hdfs_broker目录,执行build.sh编译:

    [root@8122c5f919fe apache-doris-0.15.0-incubating-src]# cd fs_brokers/apache_hdfs_broker/
    [root@8122c5f919fe apache_hdfs_broker]# ./build.sh
    
    • 1
    • 2

    完成后,将broker的output目录拷贝出来:

    [root@scentos doris-0.15.0]# cp -r ../apache-doris-0.15.0-incubating-src/fs_brokers/apache_hdfs_broker/output/ ./apache_hdfs_broker
    [root@scentos doris-0.15.0]# mv ./apache_hdfs_broker ./hdfs_broker
    
    • 1
    • 2

    启动broker:

    [root@scentos doris-0.15.0]# ./hdfs_broker/bin/start_broker.sh --daemon
    
    • 1

    在MySQL中添加broker:

    mysql> ALTER SYSTEM ADD BROKER broker_name "scentos:8000";
    
    • 1

    查看broker状态,其中Alive字段为true,表示连接成功:

    mysql> SHOW PROC '/brokers';
    +-------------+----------------+----------+------+-------+---------------------+---------------------+--------+
    | Name        | IP             | HostName | Port | Alive | LastStartTime       | LastUpdateTime      | ErrMsg |
    +-------------+----------------+----------+------+-------+---------------------+---------------------+--------+
    | broker_name | 192.168.31.141 | scentos  | 8000 | true  | 2022-05-14 12:44:18 | 2022-05-14 12:44:53 |        |
    +-------------+----------------+----------+------+-------+---------------------+---------------------+--------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    jpg怎么转换jpeg?一招教你轻松完成转格式
    PasteSpider的集群组件PasteCluster(让你的项目快速支持集群模式)的思路及实现(含源码)
    在推送 SwiftUI 时将隐藏添加到 TabView(底部栏)
    react源码分析:babel如何解析jsx
    Redis入门到通关之数据结构解析-RedisObject
    python知识点100篇系列(18)-解析m3u8文件的下载视频
    【DeepLearning 8】Self-Attention自注意力神经网络
    java基于springboot+vue的大学生在线答疑系统 elementui
    AI对开发者职业的影响,保持领先的7 个行动指南
    endpoint=DefaultEndpoint{ serviceUrl=‘http://127.0.0.1:10086/eureka/
  • 原文地址:https://blog.csdn.net/qq_37475168/article/details/125463463