一.海量数据实时分析-Doris入门和安装

前言

停了一个月又开始写文章啦,因为公司数据量达到了几十亿,老板需要做实时数据分析,报表看板。这么大的数据量比较好的选择是使用Doris来做,他可以脱离hadoop生态独立使用所以大受企业喜爱,也因为如此就有了这个系列的文章,喜欢的话好评点赞。

认识Doris

1.什么是Doris

Apache Doris 由百度大数据部研发(之前叫百度 Palo,2018 年贡献到 Apache 社区后,更名为 Doris ),在百度内部,有超过 200 个产品线在使用,部署机器超过 1000 台,单一业务最大可达到上百 TB。

Apache Doris 是一个现代化的 MPP(Massively Parallel Processing,即大规模并行处理)分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。Apache Doris 的分布式架构非常简洁,易于运维,并且可以支持 10PB 以上的超大数据集。Apache Doris 可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等

2.Doris的架构

Doris 中设计了 FE(Frontend)、BE(Backend)两种角色、他们都有独立的进程,FE、BE 都可线性扩展。

  • FE(Frontend):负责存储、维护集群元数据;负责接收、解析查询请求,规划查询计划,调度查询执行,返回查询结果
    FE分为三个部分:Leader 、 Follower、Observer:前两者主要是用来达到元数据的高可用,保证单节点宕机的情况下,元数据能够实时地在线恢复,而不影响整个服务。而Observer:用来扩展查询节点,同时起到元数据备份的作用。如果在发现集群压力非常大的情况下,需要去扩展整个查询的能力,那么可以加 observer 的节点。observer 不参与任何的写入,只参与读取。
  • BE(Backend):负责物理数据的存储和计算;依据 FE 生成的物理计划,分布式地执行查询。数据的可靠性由 BE 保证,BE 会对整个数据存储多副本或者是三副本。副本数可根据需求动态调整
  • MySQL Client :Doris 借助 MySQL 协议,用户使用任意 MySQL 的 ODBC/JDBC 以及 MySQL 的客户端,都可以直接访问 Doris。
  • Broker :Broker 为一个独立的无状态进程。封装了文件系统接口,提供 Doris 读取远端存储系统中文件的能力,包括 HDFS,S3,BOS 等。

Doris安装

安装过程还是比较复杂的,需要你有一些细心和耐心,因为Doris堆环境的要求还是比较高的,所以我这里只能以较低的配置进行测试。

1.环境要求

环境要求

系统 要求
Centos 7.x+
Java 1.8+

机器要求 - 测试环境

模块 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 *

Doris堆环境要求比较高,我们没办法按照真实环境来,这里我使用VMware安装了一个 Centos7.9 的 ,8C , 10G 我们用于单机测试。

2.前置配置

doris要求在linux上面只要要打开65536的句柄数,doris才能正常运行。而linux默认打开的句柄数为1000.所以需要修改。

第一步:vi /etc/security/limits.conf , 在文件最后添加下面几行信息(注意* 也要复制进去)

shell 复制代码
* soft nofile 65536
* hard nofile 65536 
* soft nproc 65536
* hard nproc 65536

然后执行:ulimit -n 65536 使它临时生效,如果要永久生效需要:reboot 重启系统,如果不修改这个句柄数大于等于60000,启动doris的be节点的时候就会报如下的错:Please set the maximum number of open file descriptors to be 65536 using 'ulimit -n 65536'.

另外第一次启动的时候可能会报错:Please set vm.max_map_count to be 2000000 under root using 'sysctl -w vm.max_map_count=2000000'

解决方案:命令行输入:sysctl -w vm.max_map_count=2000000

第二步:设置文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量

shell 复制代码
sysctl -w vm.max_map_count=2000000

上面命令也是临时的,如果要永久修改需要 :vi /etc/sysctl.conf 然后把 vm.max_map_count=2000000加入到最后一行,执行: sysctl -p 让他永久生效 , 然后通过:
sysctl -a|grep vm.max_map_count 命令检查是否生效。

第三步骤:时钟同步,ntpdate是一个向互联网上的时间服务器进行时间同步的软件

shell 复制代码
yum install ntpdate -y

安装之后,执行: ntpdate ntp.sjtu.edu.cn 进行时间同步

第四步:关闭交换分区(swap): swapoff -a ,交换分区是linux用来当做虚拟内存用的磁盘分区;linux可以把一块磁盘分区当做内存来使用(虚拟内存、交换分区);Linux使用交换分区会给Doris带来很严重的性能问题,建议在安装之前禁用交换分区;

shell 复制代码
1、查看 Linux 当前 Swap 分区
free -m
2、关闭 Swap 分区
swapoff -a
 
[root@doitedu01 app]# free -m
              total        used        free      shared  buff/cache   available
Mem:           5840         997        4176           9         666        4604
Swap:          6015           0        6015
[root@doitedu01 app]# swapoff -a
 
3.验证是否关闭成功
[root@doitedu01 app]# free -m   
              total        used        free      shared  buff/cache   available
Mem:           5840         933        4235           9         671        4667
Swap:             0           0           0

注意事项:

  • FE 的磁盘空间主要用于存储元数据,包括日志和 image。通常从几百 MB 到几个GB 不等。
  • BE 的磁盘空间主要用于存放用户数据,总磁盘空间按用户总数据量* 3(3 副本)计算,然后再预留额外 40%的空间用作后台 compaction 以及一些中间数据的存放。
  • 一台机器上可以部署多个 BE 实例,但是只能部署一个 FE。如果需要 3 副本数 据,那么至少需要 3 台机器各部署一个 BE 实例(而不是 1 台机器部署 3 个 BE 实例)。多 个 FE 所在服务器的时钟必须保持一致(允许最多 5 秒的时钟偏差)
  • 测试环境也可以仅适用一个 BE 进行测试。实际生产环境,BE 实例数量直接决定了整体查询延迟。
  • 所有部署节点关闭 Swap。
  • FE 节点数据至少为 1(1 个 Follower)。当部署 1 个 Follower 和 1 个 Observer 时,可以实现读高可用。当部署 3 个 Follower 时,可以实现读写高可用(HA)。
  • Follower 的数量必须为奇数,Observer 数量随意。
  • 根据以往经验,当集群可用性要求很高时(比如提供在线业务),可以部署 3 个Follower 和 1-3 个 Observer。如果是离线业务,建议部署 1 个 Follower 和 1-3 个 Observer。
  • Broker 是用于访问外部数据源(如 HDFS)的进程。通常,在每台机器上部署一个 broker 实例即可。

3.前置软件安装

  • 第一步:安装好JDK,自己百度一篇文章进行安装,这里省略,我使用的是JDK1.8版本
  • 第二步:安装好Mysql,因为Doris使用的是Mysql的客户端,所以要提前安装好,自己百度一篇文章去安装,我这里使用的是Mysql
    5.7

4.安装FE

去官网下载源码包 : https://doris.incubator.apache.org/zh-CN/download/ ,我这里使用的是1.2.5

有1个多G,下载好之后上传到Linux服务器上,执行下面命令进行解压

shell 复制代码
tar -xvf apache-doris-1.2.5-bin-x86_64.tar.xz

我的解压路径是 /root/doris/apache-doris 然后去修改 fe.conf 文件: vi /root/doris/apache-doris/fe/conf/fe.conf

shell 复制代码
#配置文件中指定元数据路径: 注意这个文件夹要自己创建
meta_dir = /root/doris/apache-doris/fe/doris-meta
 
#修改绑定 ip(每台机器修改成自己的 ip) 
priority_networks = 机器IP/24

注意需要手动创建元数据目录: mkdir -p /root/doris/apache-doris/fe/doris-meta

接着就是配置环境变量了,执行: vi /etc/profile ,在文件后面加入下面内容后,执行 : source /etc/profile 让其生效

shell 复制代码
#doris_fe
export DORIS_FE_HOME=/root/doris/apache-doris/fe
export PATH=$PATH:$DORIS_FE_HOME/bin

接着就是做集群分发,我这里是单机测试所以不需要做集群分发 ,下面的 hadoop02 和 hadoop03指的是另外2台机器

shell 复制代码
> scp /et/profile hadoop02:/etc/profile
> scp -r /root/doris/apache-doris/ hadoop02:/root/doris/apache-doris/
 
> scp /et/profile hadoop03:/etc/profile
> scp -r /root/doris/apache-doris/ hadoop03:/root/doris/apache-doris/

接着就是启动 fe ,进入到fe的bin目录下执行下面命令,该脚本以守护(daemon)模式运行

shell 复制代码
[root@xx bin]# ./start_fe.sh --daemon

通过:jps 命令查看是否有启动的进程

问题:在这里我一开始只用./start_fe.sh 启动,进程一直结束不了。使用ctrl+C跳出后,进程也随之结束了。

原因这可能是因为在非守护(daemon)模式下,该命令在前台运行,占用了终端并阻塞了你的输入。通过使用 --daemon 参数,你将该命令转为在后台以守护进程的形式运行,不再与当前终端关联,因此可以正常结束终端而不影响该进程的运行。

生产环境强烈建议单独指定目录不要放在 Doris 安装目录下,最好是单独的磁盘(如果有 SSD 最好)。 如果机器有多个 ip, 比如内网外网, 虚拟机 docker 等, 需要进行 ip 绑定,才能正确识别。 JAVA_OPTS 默认 java 最大堆内存为 4GB,建议生产环境调整至 8G 以上。

5.安装BE

进入到doris安装目录下的 be目录下修改配置:/root/doris/apache-doris/be/conf/be.conf ,修改内容如下

shell 复制代码
 
#配置文件中指定数据存放路径: 
storage_root_path = /root/doris/apache-doris/be/storage.HDD;/root/doris/apache-doris/be/storage.SSD
 
#修改绑定 ip(每台机器修改成自己的 ip) 
priority_networks = 机器IP/24 
 

第一次启动的时候可能会报错:Please set vm.max_map_count to be 2000000 under root using 'sysctl -w vm.max_map_count=2000000' ,解决方案命令行输入:sysctl -w vm.max_map_count=2000000

另外记得下面两个目录需要手动创建

shell 复制代码
mkdir -p /root/doris/apache-doris/be/storage.HDD
mkdir -p /root/doris/apache-doris/be/storage.SSD

接着就是给BE添加环境变量,执行: vi /etc/profile ,在文件后面加入下面内容后,执行 : source /etc/profile 让其生效

shell 复制代码
#doris_Be
export DORIS_BE_HOME=/root/doris/apache-doris/be
export PATH=$PATH:$DORIS_BE_HOME/bin

启动BE,进入到be/bin目录执行下面命令, 执行后可以通过 :jps查看是否启动成功

shell 复制代码
[root@xx bin]# ./start_be.sh --daemon 

6.让BE加入FE

目前我们安装好了BE和FE,但是他们2个是独立的应用,我们需要通过Mysql的客户端把BE加入FE,接下来我们登录FE

shell 复制代码
mysql -h 机器IP -P 9030 -uroot -p

第一次进去后是没有密码的,登录之后需要设置密码,如下

mysql 复制代码
mysql > SET PASSWORD FOR 'root' = PASSWORD('123456');

修改密码后重新登录:mysql -h 机器IP -P 9030 -uroot -p123456 ,然后把BE加入FE,执行命令

mysql 复制代码
ALTER SYSTEM ADD BACKEND "192.168.220.253:9050";

加入之后,通过 :show proc '/backends' \G 来查看是否成功,如果Active:true那就是OK的了

show proc '/backends' \G; --以文本的形式展示所有的be节点
show proc '/frontends' \G;  --以文本的形式展示所有的fe节点

Alive so为 false 表示该 BE 节点还是死的

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

另外我们也可以通过可视化界面查看:http://192.168.220.253:8030/ ,用户名和密码是:root/123456,登录后点击:system -> backends 即可查看

7.部署FS_broker(可选)

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

第一步:我们需要启动fs_broker ,进入目录:cd /root/doris/apache-doris/extensions/apache_hdfs_broker/bin,然后执行启动命令

shell 复制代码
[root@192 bin]# ./start_broker.sh --daemon

第二步:使用Mysql客户端把fs_broker 加入到 FE

shell 复制代码
mysql -h 192.168.220.253 -P 9030 -uroot -p123456
ALTER SYSTEM ADD BROKER fs_broker "192.168.220.253:8000";

注意:fs_broker是一个名字可以自定义,通过:SHOW PROC '/brokers'查看,也可以通过界面查看

8.扩容缩容

另外说一点:Doris还支持扩容和缩容,如果机器不够用时就可以进行扩容,进行扩容比较简单,比如我们再增加第二台,第三台机器,都安装并启动好be,fe;第一次启动需要增加helper 来指定主节点

shell 复制代码
start_fe.sh --daemon --helper linux01:9010
start_be.sh --daemon

然后在第一台机器执行命令把其他节点加入进来,如下

shell 复制代码
alter system add backend 'linux02:9050';
alter system add backend 'linux03:9050';
alter system add follower 'linux03:9010';
alter system add follower 'linux02:9010';

如果要缩容的话,先将该台机器的fe进程停掉 然后执行下面命令移除

shell 复制代码
alter system drop follower/observer "doitedu01:9010"; 

对于be也一样,先将该台机器的be进程停掉,然后移除

shell 复制代码
//直接删除,可能会造成数据的误删,丢失,不建议使用
alter system drop backend "doitedu01:9050"; 
//先备份后删除
alter system decommission backend "doitedu01:9050"; 

该命令用于安全删除 BE 节点。命令下发后,Doris 会尝试将该 BE 上的数据向其 他 BE 节点迁移,当所有数据都迁移完成后,Doris 会自动删除该节点。

9.在Navcat中连接

文章结束,如果对你有帮助请点赞收藏哦!!!

相关推荐
云云3211 小时前
怎么通过亚矩阵云手机实现营销?
大数据·服务器·安全·智能手机·矩阵
新加坡内哥谈技术1 小时前
苏黎世联邦理工学院与加州大学伯克利分校推出MaxInfoRL:平衡内在与外在探索的全新强化学习框架
大数据·人工智能·语言模型
Data-Miner1 小时前
经典案例PPT | 大型水果连锁集团新零售数字化建设方案
大数据·big data
lovelin+v175030409662 小时前
安全性升级:API接口在零信任架构下的安全防护策略
大数据·数据库·人工智能·爬虫·数据分析
道一云黑板报2 小时前
Flink集群批作业实践:七析BI批作业执行
大数据·分布式·数据分析·flink·kubernetes
节点。csn2 小时前
flink集群搭建 详细教程
大数据·服务器·flink
数据爬坡ing3 小时前
小白考研历程:跌跌撞撞,起起伏伏,五个月备战历程!!!
大数据·笔记·考研·数据分析
云云3213 小时前
云手机方案全解析
大数据·服务器·安全·智能手机·矩阵
武子康4 小时前
大数据-257 离线数仓 - 数据质量监控 监控方法 Griffin架构
java·大数据·数据仓库·hive·hadoop·后端
碳学长4 小时前
2025系统架构师(一考就过):案例题之一:嵌入式架构、大数据架构、ISA
大数据·架构·系统架构