当前位置: 首页 > news >正文

一.海量数据实时分析-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.环境要求

环境要求

系统要求
Centos7.x+
Java1.8+

机器要求 - 测试环境

模块CPU内存磁盘网络实例数量
Frontend8核+8GB+SSD 或 SATA,10GB+ *千兆网卡1
Backend8核+16GB+SSD 或 SATA,50GB+ *千兆网卡1-3 *

机器要求 - 生产环境

模块CPU内存磁盘网络实例数量(最低要求)
Frontend16核+64GB+SSD 或 RAID 卡,100GB+ *万兆网卡1-5 *
Backend16核+64GB+SSD 或 SATA,100G+ *万兆网卡10-100 *

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

2.前置配置

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

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

* 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(虚拟内存区域)的数量

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是一个向互联网上的时间服务器进行时间同步的软件

yum install ntpdate -y

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

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

1、查看 Linux 当前 Swap 分区
free -m
2、关闭 Swap 分区
swapoff -a[root@doitedu01 app]# free -mtotal        used        free      shared  buff/cache   available
Mem:           5840         997        4176           9         666        4604
Swap:          6015           0        6015
[root@doitedu01 app]# swapoff -a3.验证是否关闭成功
[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服务器上,执行下面命令进行解压

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

#配置文件中指定元数据路径: 注意这个文件夹要自己创建
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 让其生效

#doris_fe
export DORIS_FE_HOME=/root/doris/apache-doris/fe
export PATH=$PATH:$DORIS_FE_HOME/bin

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

> 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)模式运行

[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 ,修改内容如下

#配置文件中指定数据存放路径: 
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

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

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 让其生效

#doris_Be
export DORIS_BE_HOME=/root/doris/apache-doris/be
export PATH=$PATH:$DORIS_BE_HOME/bin

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

[root@xx bin]# ./start_be.sh --daemon 

6.让BE加入FE

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

mysql -h 机器IP -P 9030 -uroot -p

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

mysql > SET PASSWORD FOR 'root' = PASSWORD('123456');

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

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,然后执行启动命令

[root@192 bin]# ./start_broker.sh --daemon

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

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 来指定主节点

start_fe.sh --daemon --helper linux01:9010
start_be.sh --daemon

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

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进程停掉 然后执行下面命令移除

alter system drop follower/observer "doitedu01:9010"; 

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

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

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

9.在Navcat中连接

在这里插入图片描述

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • JMeter之上传文件同时带有参数
  • Python计算机视觉四章-照相机模型与增强现实
  • Spring Cloud全解析:网关之GateWay过滤器
  • RASA使用长文记录以及一些bug整理
  • 鸿蒙启动框架配置文件(StartUpTask)
  • 学习记录:js算法(二十一):字符串的排列、替换后的最长重复字符
  • YOLOv9改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
  • 前端内存泄露案例与解决方案
  • Ubuntu 安装个人热点
  • 字符集介绍
  • 八、2 DMA数据转运 DMA函数介绍
  • 使用 streamlink 把 m3u8 转为 mp4
  • 如何使用IDEA搭建Mybatis框架环境(详细教程)
  • 什么是USB?
  • 前端配置环境
  • [译]前端离线指南(上)
  • 30天自制操作系统-2
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Elasticsearch 参考指南(升级前重新索引)
  • Fastjson的基本使用方法大全
  • interface和setter,getter
  • quasar-framework cnodejs社区
  • 开源SQL-on-Hadoop系统一览
  • 浏览器缓存机制分析
  • 协程
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 延迟脚本的方式
  • 由插件封装引出的一丢丢思考
  • C# - 为值类型重定义相等性
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #传输# #传输数据判断#
  • (1)Jupyter Notebook 下载及安装
  • (175)FPGA门控时钟技术
  • (52)只出现一次的数字III
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (五)关系数据库标准语言SQL
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (转载)从 Java 代码到 Java 堆
  • **CI中自动类加载的用法总结
  • ./configure,make,make install的作用(转)
  • .Net 4.0并行库实用性演练
  • .Net Winform开发笔记(一)
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET单元测试
  • .NET分布式缓存Memcached从入门到实战
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .so文件(linux系统)
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘