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

news2024/11/14 13:36:10

前言

停了一个月又开始写文章啦,因为公司数据量达到了几十亿,老板需要做实时数据分析,报表看板。这么大的数据量比较好的选择是使用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 -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服务器上,执行下面命令进行解压

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中连接

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2095513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaWeb】Http请求与响应

文章目录 Http 请求与响应一、Http 请求格式1、请求行2、请求头3、请求体(post请求才有) 二、HttpServletRequest1、获取 请求行 信息2、获取 请求头 信息3、获取 请求参数 信息 三、Http 响应格式1、响应行2、响应头3、响应体(正文&#xff…

AI大模型应用开发环境配置

目录 一、工具下载 1、Python官网下载 2、Pycharm官网下载 3、Streamlit官网下载 二、升级PIP (一)检查PIP版本 (二)在anaconda Prompt命令窗口输入 三、安装openai组件 四、安装streamlit组件 五、启动streamlit 一、工…

Voi滑板车公司助农扶商,着手打造流量板块

Voi滑板车公司助农扶商,着手打造流量板块。 吉林是粮食大省,是全国优质粳稻主产区,现阶段全省水稻年产量600多万吨(商品量400万吨左右),占东北三省一区的24%。巍巍长白山、悠悠松江水,辽阔黑土…

Qt:玩转QPainter序列九(文本,文本框,填充)

前言 继续承接序列八 正文 1. drawImage系列函数 绘制图像 inline void drawImage(const QPoint &p, const QImage &image); 作用: 在指定的点 p 上绘制 QImage 图像。图像的左上角将对齐到 p 点。 inline void drawImage(int x, int y, const QImage &image,…

若依 Vue3的前后端分离系统管理 创建

RuoYi 若依官方网站 |后台管理系统|权限管理系统|快速开发框架|企业管理系统|开源框架|微服务框架|前后端分离框架|开源后台系统|RuoYi|RuoYi-Vue|RuoYi-Cloud|RuoYi框架|RuoYi开源|RuoYi视频|若依视频|RuoYi开发文档|若依开发文档|Java开源框架|Java|SpringBoot|SrpingBoot2.0…

【JPCS独立出版】第四届电气工程与计算机技术国际学术会议(ICEECT 2024,9月27-29)

第四届电气工程与计算机技术国际学术会议(ICEECT2024)将于9月27日-29日在哈尔滨举办。 会议主要围绕"电路与系统"、“电气工程材料”、“计算机视觉”、“计算机技术”等专业研究领域展开讨论。旨在为气工程、计算机技术等领域的专家学者及企业…

Java EE

Java EE 包含JavaSE 增加一些新的API 构建一个后端服务 网页->web服务器->java后端 web后端(javaEE)程序需要运行在服务器中的,这样前端才可以访问得到 服务器:是容器,是连接用户和程序之间的中间件 解释1:一款软件&#…

HBase 部署及shell操作

HBase 数据库 一、HBase 概述1.1 HBase 是什么HBase 的特点 二、HBase 模型及架构2.1 HBase 逻辑模型2.2 HBase 数据模型2.3 HBase 物理模型2.3.1 列簇物理模型2.3.2 Rowkey 字段排序2.3.3 Region 存储到不同节点2.3.4 Region 结构 2.4 HBase 基本架构 三、搭建 HBase 分布式集…

【Linux】线程结束

目录 线程安全和重入 死锁 STL中的容器不是线程安全的 线程安全的单例模式 自旋锁 读者写者问题 线程安全和重入 线程安全:多个线程并发执行同一段代码时,不会出现不同的(异常的)结果,我们就说线程是安全的。常见…

如何学好文件操作,快来看这篇文章(沉淀中)!!!!

文章目录 1. 为什么使用文件?2. 什么是文件?2.1 程序文件2.2 数据文件2.3 文件名 3. ⼆进制文件和文本文件?4. 文件的打开和关闭4.1 流和标准流4.1.1 流4.1.2 标准流 4.2 文件指针4.3 文件的打开和关闭 5. ⽂件的顺序读写5.1 顺序读写函数介绍…

jQuery库

注明&#xff1a;本文参考自&#xff1a;jQuery - 白月黑羽 (byhy.net) jQuery安装 Download jQuery | jQuery下载到本地 ps: script标签中的src属性&#xff1a;表示包含要执行的代码的外部文件位置 <!DOCTYPE html> <html lang"en"><head><s…

unity游戏开放:标记物体 一目了然

Unity游戏开发:标记物体,让开发变得一目了然 “好读书&#xff0c;不求甚解&#xff1b;每有会意&#xff0c;便欣然忘食。” 本文目录&#xff1a; Unity游戏开发 Unity游戏开发:标记物体,让开发变得一目了然前言1. 什么是Tag&#xff1f;2. Unity中如何添加和管理Tag步骤1&am…

vue如何引入element-ui

2.x用element-ui 3.x用element-plus https://blog.csdn.net/weixin_41207479/article/details/127066333 引入element-ui的三种方式

点餐API接口对接的过程中需要注意哪些问题

以下是点餐 API 接口对接的一般步骤&#xff1a; 选择合适的点餐 API 服务提供商&#xff1a;市面上有不少提供点餐 API 的平台。你需要根据自身业务需求、预算、接口的稳定性和性能、技术支持等因素来综合考量选择。注册与申请&#xff1a;在选定 API 服务提供商后&#xff0…

数据响应式

响应式原理 课堂主题 1.利用defineProperty实现数据劫持2.利用ES6中proxy实现数据劫持3.实现数据驱动视图更新&#xff0c;实现数据响应4.发布订阅模式 知识点 defineProperty&#xff1b;Proxy代理数据劫持发布订阅观察者模式与发布订阅数据响应式 defineProperty Objec…

Junit单元测试入门

目录 一、单元测试 1.1 基本概念 1.2 以往测试存在的问题和不足 二、快速入门 2.1 基本步骤 2.2 基本使用示例&#xff08;vscode为例&#xff09; 2.2 断言机制&#xff08;重要&#xff09; 2.3 其它注解 一、单元测试 1.1 基本概念 针对最小单元的测试&#xff0c…

集成电路学习:什么是CPU中央处理器

一、CPU&#xff1a;中央处理器 CPU&#xff0c;全称Central Processing Unit&#xff0c;即中央处理器&#xff0c;是计算机系统的核心部件&#xff0c;负责执行程序指令&#xff0c;完成数据的算术运算或逻辑运算等任务。它是计算机中最重要的硬件之一&#xff0c;相当于计算…

【Qt 事件】—— 详解Qt事件处理

目录 &#xff08;一&#xff09;事件介绍 &#xff08;二&#xff09;事件的处理 &#xff08;三&#xff09;按键事件 3.1 单个按键 3.2 组合按键 &#xff08;四&#xff09;鼠标事件 4.1 鼠标单击事件 4.2 鼠标释放事件 4.3 鼠标双击事件 4.4 鼠标移动事件 4.5…

【Redis】Redis 典型应⽤ - 缓存 (cache)

Redis 典型应⽤ - 缓存 cache 什么是缓存使⽤ Redis 作为缓存缓存的更新策略1) 定期⽣成2) 实时⽣成 缓存预热, 缓存穿透, 缓存雪崩 和 缓存击穿关于缓存预热 (Cache preheating)关于缓存穿透 (Cache penetration)关于缓存雪崩 (Cache avalanche)关于缓存击穿 (Cache breakdown…

OpenLayers3, 航线动画实现

文章目录 一、前言二、代码实现三、总结 一、前言 本文基于OpenLayers3&#xff0c;实现航线动画的功能。 二、代码实现 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quo…