一.海量数据实时分析-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中连接

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

相关推荐
宅小海41 分钟前
scala String
大数据·开发语言·scala
小白的白是白痴的白42 分钟前
11.17 Scala练习:梦想清单管理
大数据
java1234_小锋1 小时前
Elasticsearch是如何实现Master选举的?
大数据·elasticsearch·搜索引擎
Java 第一深情5 小时前
零基础入门Flink,掌握基本使用方法
大数据·flink·实时计算
MXsoft6185 小时前
华为服务器(iBMC)硬件监控指标解读
大数据·运维·数据库
PersistJiao6 小时前
Spark 分布式计算中网络传输和序列化的关系(二)
大数据·网络·spark·序列化·分布式计算
九河云6 小时前
如何对AWS进行节省
大数据·云计算·aws
FreeIPCC7 小时前
谈一下开源生态对 AI人工智能大模型的促进作用
大数据·人工智能·机器人·开源
梦幻通灵7 小时前
ES分词环境实战
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客7 小时前
Elasticsearch 中的热点以及如何使用 AutoOps 解决它们
大数据·运维·elasticsearch·搜索引擎·全文检索