前言
停了一个月又开始写文章啦,因为公司数据量达到了几十亿,老板需要做实时数据分析,报表看板。这么大的数据量比较好的选择是使用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中连接
文章结束,如果对你有帮助请点赞收藏哦!!!