简介

      Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即席查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。

    Apache Doris 由百度大数据部研发(之前叫百度 Palo , 2018 年贡献到 Apache 社区后,

更名为 Doris ),在百度内部,有超过 200 个产品线在使用,部署机器超过 1000 台,单一

业务最大可达到上百 TB 。

    Apache Doris 是一个现代化的 MPP ( Massively Parallel Processing ,即大规模并行处理)

分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。

    Apache Doris 的分布式架构非常简洁,易于运维,并且可以支持 10PB 以上的超大数据集。

    Apache Doris 可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式

数据分析和探索式数据分析等。




doris 数据类型与 mysql数据类型对应 关系 doris 数据库_大数据


使用场景

如下图所示,数据源经过各种数据集成和加工处理后,通常会入库到实时数仓 Doris 和离线湖仓(Hive, Iceberg, Hudi 中),Apache Doris 被广泛应用在以下场景中。

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_数据_02

  • 报表分析
  • 实时看板 (Dashboards)
  • 面向企业内部分析师和管理者的报表
  • 面向用户或者客户的高并发报表分析(Customer Facing Analytics)。比如面向网站主的站点分析、面向广告主的广告报表,并发通常要求成千上万的 QPS ,查询延时要求毫秒级响应。著名的电商公司京东在广告报表中使用 Apache Doris ,每天写入 100 亿行数据,查询并发 QPS 上万,99 分位的查询延时 150ms。
  • 即席查询(Ad-hoc Query):面向分析师的自助分析,查询模式不固定,要求较高的吞吐。小米公司基于 Doris 构建了增长分析平台(Growing Analytics,GA),利用用户行为数据对业务进行增长分析,平均查询延时 10s,95 分位的查询延时 30s 以内,每天的 SQL 查询量为数万条。
  • 统一数仓构建 :一个平台满足统一的数据仓库建设需求,简化繁琐的大数据软件栈。海底捞基于 Doris 构建的统一数仓,替换了原来由 Spark、Hive、Kudu、Hbase、Phoenix 组成的旧架构,架构大大简化。
  • 数据湖联邦查询:通过外表的方式联邦分析位于 Hive、Iceberg、Hudi 中的数据,在避免数据拷贝的前提下,查询性能大幅提升。

技术概述

Doris整体架构如下图所示,Doris 架构非常简单,只有两类进程

  • Frontend(FE),主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。
  • Backend(BE),主要负责数据存储、查询计划的执行。

这两类进程都是可以横向扩展的,单集群可以支持到数百台机器,数十 PB 的存储容量。并且这两类进程通过一致性协议来保证服务的高可用和数据的高可靠。这种高度集成的架构设计极大的降低了一款分布式系统的运维成本。

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_apache_03

下载

 https://doris.incubator.apache.org/zh-CN/docs/dev/get-starting/

安装&使用

环境前提

安装相应的JDK

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_Apache_04

配置集群的SSH(集群分发脚本)

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
  echo Not Enough Arguement!
  exit;
fi
#2. 遍历集群所有机器
for host in  master node1 node2
do
  echo ====================  $host  ====================
  #3. 遍历所有目录,挨个发送
  for file in $@
  do
    #4 判断文件是否存在
    if [ -e $file ]
    then
      #5. 获取父目录
      pdir=$(cd -P $(dirname $file); pwd)
      #6. 获取当前文件的名称
      fname=$(basename $file)
      ssh $host "mkdir -p $pdir"
      rsync -av $pdir/$fname $host:$pdir
    else
      echo $file does not exists!
    fi
  done
done

创建对应的目录并且分发

./xsync doris/

安装Doris前提linux配置

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_apache_05

  • 所有部署节点关闭 Swap。

Linux交换分区会给Doris带来很严重的性能问题,需要在安装之前禁用交换分区。

  • 设置系统最大打开文件句柄数。
vi /etc/security/limits.conf 
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
  • 时钟同步

Doris 的元数据要求时间精度要小于5000ms,所以所有集群所有机器要进行时钟同步,避免因为时钟问题引发的元数据不一致导致服务出现异常。

  • Liunx文件系统

这里我们推荐使用ext4文件系统,在安装操作系统的时候,请选择ext4文件系统。

详细注意事项看这里

解压安装 

前期准备

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_大数据_06

下载编译包

链接:https://pan.baidu.com/s/1u3ZovCETHz9IMw_v0bpvrQ 
提取码:yyds 
--来自百度网盘超级会员V4的分享

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_大数据_07

 解压

tar -zxvf apache-doris-1.1.0-bin-x86-jdk8.tar.gz

安装启动FE

修改环境变量

配置DORIS_HOME

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_apache_08

修改环境配置文件

sudo vi /etc/profile.d/my.sh
#DORIS_HOME
export DORIS_HOME=/home/bigdata/doris/apache-doris-1.1.0-bin-x86-jdk8
export PATH=$PATH:$DORIS_HOME/bin
source /etc/profile.d/my.sh

分发配置文件

sudo ./xsync /etc/profile.d/my.sh

修改FE配置文件

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

启动

/home/bigdata/doris/apache-doris-1.1.0-bin-x86-jdk8/fe/bin/start_fe.sh --daemon

启动可能错误 (在启动 FE 时,报事务错误 20 问题,状态为 UNKNOWN)

exit.com.sleepycat.je.rep.ReplicaWriteException: (JE 18.3.12) Problem closing transaction 20. The current state is:UNKNOWN

  • 问题原因
    硬盘空间不足,需更多空间
  • 解决方案
    释放硬盘空间或者挂载新硬盘

访问地址 

http://master:8030/login

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_数据_09

 默认用户root 密码为空

安装启动BE

分发Doris

./xsync /home/bigdata/doris/apache-doris-1.1.0-bin-x86-jdk8/

创建BE存储目录(根据自身情况操作,每一个BE节点都要配置,好处就是可以分开多磁盘存储数据)

mkdir storage1 storage2

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_数据_10

 修改BE配置文件

vim /home/bigdata/doris/apache-doris-1.1.0-bin-x86-jdk8/be/conf
#配置文件中指定数据存放路径:
storage_root_path = /home/bigdata/doris/apache-doris-1.1.0-bin-x86-jdk8/be/storage1;/home/bigdata/doris/apache-doris-1.1.0-bin-x86-jdk8/be/doris-storage2 #修改绑定 ip(每台机器修改成自己的 ip)
priority_networks = 192.168.66.10/24
  • 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 : 表示存储介质是HDD;
  • /home/disk2/doris.SSD: 表示存储介质是SSD;
  • /home/disk2/doris: 表示存储介质是HDD(默认)


  • 如果机器有多个 IP, 比如内网外网 , 虚拟机 docker 等 , 需要进行 IP 绑定,才能正确识 别。

安装Mysql客户端连接FE 


配置好存储路径还有ip以后增量分发BE配置文件(为了简便配置所以就分发了,生成环境一个个配置,这里相当于BE的扩容操作)



安装mysql客户端


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


链接:https://pan.baidu.com/s/1hxBhoH6W6XX1fFcmISeFRg 
提取码:yyds 
--来自百度网盘超级会员V4的分享



doris 数据类型与 mysql数据类型对应 关系 doris 数据库_大数据_11


 安装

sudo rpm -ivh *.rpm

连接Doris (FE)

mysql -h master -P 9030 -uroot

 修改登录密码

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

退出重新登录

mysql -h master -P 9030 -uroot -p

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_Apache_12

添加BE到FE(BE扩容)

ALTER SYSTEM ADD BACKEND "master:9050";

查看BE状态

SHOW PROC '/backends';

 启动BE(master|根据自己的机器来节点)

/home/bigdata/doris/apache-doris-1.1.0-bin-x86-jdk8/be/bin/start_be.sh --daemon

添加BE成功以后Navicat工具才能够连接FE(所以前面用的是命令行)


使用Mysql客户端连接FE(我使用的是Navicat)



doris 数据类型与 mysql数据类型对应 关系 doris 数据库_Apache_13



看到下图说明加入成功



doris 数据类型与 mysql数据类型对应 关系 doris 数据库_数据_14


 启动其他机器加入FE

ALTER SYSTEM ADD BACKEND "node1:9050";
ALTER SYSTEM ADD BACKEND "node2:9050";

查看BE状态

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_数据_15

在node1,和node2执行启动BE

/home/bigdata/doris/apache-doris-1.1.0-bin-x86-jdk8/be/bin/start_be.sh --daemon

看到下图说明加入成功

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_大数据_16

 配置FS_Broke (可选)

Broker 以插件的形式,独立于 Doris 部署。如果需要从第三方存储系统导入数据,需要

部署相应的 Broker ,默认提供了读取 HDFS 、百度云 BOS 及 Amazon S3 的 fs_broker 。

fs_broker 是无状态的,建议每一个 FE 和 BE 节点都部署一个 Broker 。

启动Broke

/home/bigdata/doris/apache-doris-1.1.0-bin-x86-jdk8/apache_hdfs_broker/bin/start_broker.sh --daemon

添加 Broker


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


ALTER SYSTEM ADD BROKER broker_name "master:8000","node1:8000","node2:8000";

查询Broke状态

SHOW PROC "/brokers";

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_数据_17

FE扩容

查看FE

SHOW PROC '/frontends';

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_Apache_18


添加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 "node1:9010";
ALTER SYSTEM ADD OBSERVER "node2:9010";

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_数据_19

配置及启动 Follower 和 Observer


第一次启动时,启动命令需要添加参--helper leader 主机: edit_log_port:

由于开始启动FE以后我们分发包到了node1,和node2,所以两台机器都要做下面的操作

删除doris-meta里面的数据

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_apache_20

meta_dir = /home/bigdata/doris/apache-doris-1.1.0-bin-x86-jdk8/doris-meta

修改ip

priority_networks = 192.168.66.20/24

分别启动(node1,node2)FE,第一次启动需要添加--helper,后面启动就不用了

/home/bigdata/doris/apache-doris-1.1.0-bin-x86-jdk8/fe/bin/start_fe.sh --helper master:9010 --daemon

查看是否添加成功

SHOW PROC '/frontends';

有一个小错误(时间问题,如果FE的follower的时间和master相差5秒就不能够加入)

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_Apache_21


doris 数据类型与 mysql数据类型对应 关系 doris 数据库_Apache_22

 node1执行时间同步

systemctl stop ntpd
sudo ntpdate 120.24.81.91

 中途出现错误重新启动就能解决问题

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_大数据_23

删除 FE 节点命令

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


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



删除BE节点


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


ALTER SYSTEM DECOMMISSION BACKEND "be_host:be_heartbeat_service_port";

doris 数据类型与 mysql数据类型对应 关系 doris 数据库_apache_24

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;


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


重试即可。


Doris集群启停脚本

#!/bin/bash
 
case $1 in
"start"){
        for i in master node1 node2
        do
                echo " --------启动 $i FE-------"
                ssh $i "/home/bigdata/doris/apache-doris-1.1.0-bin-x86-jdk8/fe/bin/start_fe.sh --daemon"
        done
		
		for i in master node1 node2
        do
                echo " --------启动 $i BE-------"
                ssh $i "/home/bigdata/doris/apache-doris-1.1.0-bin-x86-jdk8/be/bin/start_be.sh --daemon"
        done
		
		for i in master node1 node2
        do
                echo " --------启动 $i Broke-------"
                ssh $i "/home/bigdata/doris/apache-doris-1.1.0-bin-x86-jdk8/apache_hdfs_broker/bin/start_broker.sh --daemon"
        done
};; 
"stop"){
		for i in master node1 node2
        do
                echo " --------启动 $i Broke-------"
                ssh $i "/home/bigdata/doris/apache-doris-1.1.0-bin-x86-jdk8/apache_hdfs_broker/bin/stop_broker.sh --daemon"
        done
		
		for i in master node1 node2
        do
                echo " --------启动 $i BE-------"
                ssh $i "/home/bigdata/doris/apache-doris-1.1.0-bin-x86-jdk8/be/bin/stop_be.sh --daemon"
        done
		
		for i in master node1 node2
        do
                echo " --------启动 $i FE-------"
                ssh $i "/home/bigdata/doris/apache-doris-1.1.0-bin-x86-jdk8/fe/bin/stop_fe.sh --daemon"
        done
 
};;
esac
SHOW PROC '/frontends';

SHOW PROC '/backends';

SHOW PROC "/brokers";

初步安装使用

1.2.0注意事项

#!/bin/bash
case $1 in
"start"){
    for i in master
    do
        echo " --------启动 $i fe-------"
        ssh $i "/home/bigdata/module/apache-doris-fe-1.2.0-bin-x86_64/bin/start_fe.sh --daemon"
    done

    for i in master node1 node2
    do
        echo " --------启动 $i be-------"
        ssh $i "/home/bigdata/module/apache-doris-be-1.2.0-bin-x86_64/bin/start_be.sh --daemon"
    done
};;
"stop"){
    for i in master node1 node2
    do
        echo " --------关闭 $i be-------"
        ssh $i "/home/bigdata/module/apache-doris-be-1.2.0-bin-x86_64/bin/stop_be.sh"
    done
    for i in master
    do
        echo " --------关闭 $i fe-------"
        ssh $i "/home/bigdata/module/apache-doris-fe-1.2.0-bin-x86_64/bin/stop_fe.sh"
    done
};;
esac


#连接doris
./mysql -h ip -P 9030 -uroot

#启动以后添加到fe里面
ALTER SYSTEM ADD BACKEND "beip:9050";
ALTER SYSTEM ADD BACKEND "beip:9050";
ALTER SYSTEM ADD BACKEND "beip:9050";

#启动对应的be(就是上面加的节点依次启动)
/home/bigdata/module/apache-doris-be-1.2.0-bin-x86_64/bin/start_be.sh --daemon

#查看是否健康启动
show proc '/backends'

#注意事项,不然1.20启动不了
也可以在 `start_be.sh` 启动脚本第一行添加 `export JAVA_HOME=your_java_home_path` 来添加环境变量
还要把对应的udf包分配到be下的lib下面

#安装步骤
1.修改fe的元数据路径。
2.修改be的存储路径。
3.分别修改fe和be的绑定ip。

mysql客户端下载地址