(1)管理元数据(库, 表, 分区, tablet副本等信息), 执行SQL语句命令。
(2)FE高可用部署, 使用复制协议选主和主从同步元数据, 所有的元数据修改操作, 由FE Leader节点完成, FE Follower节点可执行读操作。 元数据的读写满足顺序一致性。 FE的节点数目采用2n+1, 可容忍n个节点故障。当FE Leader故障时, 从现有的Follower节点重新选主, 完成故障切换。
Observer节点仅从 Leader节点进行元数据同步,不参与选举。能够横向扩展以提供元数据的读服务的扩展性。
(3)FE的SQL layer对用户提交的SQL进行解析, 分析, 语义分析和关系代数优化, 生产逻辑执行计划。
(4)FE的Planner负责把逻辑计划转化为可分布式执行的物理计划, 分发给一组BE。
(5)FE监督,管理BE的上下线, 根据BE的健康状态和存活数, 维持tablet副本的数量。
(6)FE协调数据导入, 保证数据导入的一致性。
BE
主要负责数据的存储、以及查询计划的执行
(1)BE管理tablet副本, tablet是table经过分区分桶形成的子表, 采用列式存储。
(2)BE受驱动FE, 创建或删除子表。
(3)BE接收FE分发的物理执行计划并指定BE coordinator节点, 在BE coordinator的调度下, 与其他BE worker共同协作完成执行。
(4)BE读取本地的列存储引擎获取数据,并通过索引和谓词下沉快速过滤数据。
(5)BE后台执行compact任务, 减少查询时的读放大。
(6)数据导入时, 由FE指定BE coordinator,将数据以fanout的形式写入到tablet多副本所在的BE上。
来源:
Apache Doris 为分析而生:Doris 架构_大数据左右手的博客-CSDN博客
安装Docker环境
Docker 要求 CentOS 系统的内核版本高于3.10 ,首先查看系统内核版本是否满足
配置Docker Swarm
节点准备
准备搭建一个跨主机的集群
192.168.10.152 FE
192.168.10.150 BE
注意:
1.docker容器默认情况下,每次内网ip都有变动,但是fe节点如果启动以后ip发生变化,就会启动失败,fe.log中一直滚动 "wait catalog to be ready. FE type UNKNOWN"。BE注册给FE时候也需要固定ip注册,因此FE和BE启动时候回都要用--ip将ip固定住。
#上述解决办法是清理掉/opt/doris/fe/doris-meta中的内容,重启(初始化失败时候这样操作可以,如果是线上,还是应该尽量恢复原来的ip,不能轻易删除)
2.doker主机之间默认是无法跨主机通信的,可以选择Docker Swarm使docker可以跨主机通信。
配置Docker Swarm
Docker Swarm是 Docker Overlay 网络的一种简易实现方式,它是 Docker 开发的容器集群管理工具, 与 Docker API 兼容性很好。
并且 Linux 中安装了 Docker,也默认会安装 Swarm。因此,在这里,我们采用 Swarm 实现 集群间的网络通信。
机器配置如下
192.168.10.152 manager
192.168.10.150 worker
1、在 manager 节点创建 Swarm 集群
docker swarm init --advertise-addr=192.168.10.152
效果如下:
docker swarm init --advertise-addr=192.168.10.152
[root@localhost ~]# docker swarm init --advertise-addr=192.168.10.152
Swarm initialized: current node (maw28ll7mlxuwp47z5c5vo2v1) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-2bdwwlo8xvdskil05itg66l63dpi931oqnt5gvehlnf1it1auo-2uvypbiu0hpcn1e06hrhctbe8 192.168.10.152:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
2、在 worker 节点上执行命令,将自己加入集群
docker swarm join --token SWMTKN-1-2bdwwlo8xvdskil05itg66l63dpi931oqnt5gvehlnf1it1auo-2uvypbiu0hpcn1e06hrhctbe8 10
3、在 manager 节点,查看当前网络集群的节点情况
docker node ls
4、在 manager 节点,创建 overlay 网络
docker network create -d overlay --attachable demo
说明:
--attachable 声明当前创建的网络为:其他节点可以访问的网络
5、在 worker 节点的网络列表,是否多了这个网络
docker network ls
6、启动容器,指定该 overlay 网络
--net=demo --privileged=true
大约在0.6版,privileged被引入docker。
使用该参数,container内的root拥有真正的root权限。
否则,container内的root只是外部的一个普通用户权限。
privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。
甚至允许你在docker容器中启动docker容器。
来源:Docker篇(七): 如何实现 Docker 容器 的跨主机通讯?
拉取Doris编译镜像(本地)
拉取
docker pull apache/incubator-doris:build-env-ldb-toolchain-latest
探测Swarm集群的ip段
1.启动ip测试镜像
docker run -it --name=ip_test -d --net=demo apache/incubator-doris:build-env-ldb-toolchain-latest
2.查看容器ip
docker inspect ip_test
图示位置就是后续doris启动容器应该使用的ip段(FE和BE都需要固定ip,否则重启以后ip变化会出现故障)
在官网获取最新编译好的文件
解压be,fe同理
tar -zxvf apache-doris-fe-1.1.4-bin.tar.gz
tar -zxvf apache-doris-be-1.1.4-bin-x86_64.tar.gz
mv apache-doris-fe-1.1.4-bin.tar.gz Doris-be
mv apache-doris-be-1.1.4-bin-x86_64.tar.gz Doris-fe
创建Doris-Docker的文件,包括元数据文件夹(本地)
mkdir -p /opt/docker/doris
将编译好的FE和BE拷贝至Docker文件群内(本地)
cp -r Doris-fe/ /opt/docker/doris/fe
cp -r Doris-be/ /opt/docker/doris/be-01
将Doris-be scp到10.150的BE节点/opt/docker/doris/位置下
启动FE-Docker(10.152本地)
docker run -it -p 8030:8030 -p 9030:9030 -d --name=doris-fe --net=demo --ip 10.0.1.99 --privileged=true -v /opt/docker/doris/fe:/opt/doris/fe -v /opt/docker/doris/doris-meta:/opt/doris/doris-meta apache/incubator-doris:build-env-ldb-toolchain-latest
1.进入FE-Docker(本地)以及安装组件(FE-Docker)
进入fe-docker
docker exec -ti doris-fe /bin/bash
在FE-Docker中安装net-tools用于查看IP,因为已经固定了ip,这一步可以略过
yum install net-tools -y
2.修改FE配置(FE-Docker)
查看fe-docker的IPv4地址
ifconfig
修改配置文件
vim /opt/doris/fe/conf/fe.conf
取消priority_networks的注解,并根据Docker的网段进行配置
priority_networks = 10.0.1.0/16 #这里要根据你Docker的IP确定
“/24”表示这个IP的子网为24位,为子网掩码,指有24个“1”,即“255.255.255.0”。
子网掩码是4个8位2进制数组成的, 换化成10进制是就是现在这样的, 如255.255.255.0, 换成2进制的话就是11111111 11111111 11111111 00000000, 前面有24个1, 也就是ip/24,10.10.1.1/24 就表示ip是10.10.1.1, 子网掩码是255.255.255。
3.换Docker-JDK版本(FE-Docker)
切换Java版本为JDK1.8,该镜像默认为JDK11
alternatives --set java java-1.8.0-openjdk.x86_64
alternatives --set javac java-1.8.0-openjdk.x86_64
export JAVA_HOME=/usr/lib/jvm/java-1.8.0校验是否切换版本成功
java -version
4.配置FE-Docker的环境变量(FE-Docker)
配置环境变量
vim /etc/profile.d/doris.sh
export DORIS_HOME=/opt/doris/fe/
export PATH=DORIS_HOME/bin保存并source
source /etc/profile.d/doris.sh
5.启动Doris-FE(FE-Docker)
start_fe.sh --daemon
6.检查FE是否启动成功
1.检查是否启动成功,JPS命令下有没有PaloFe进程
2.FE 进程启动后,会首先加载元数据,根据 FE 角色的不同,在日志中会看到 transfer from UNKNOWN to MASTER/FOLLOWER/OBSERVER。最终会看到 thrift server started 日志,并且可以通过 mysql 客户端连接到 FE,则表示 FE 启动成功。
3.也可以通过如下连接查看是否启动成功:
http://fe\_host:fe\_http\_port/api/bootstrap
如果返回:
{"status":"OK","msg":"Success"}
则表示启动成功,其余情况,则可能存在问题。
4.外网环境访问http://fe\_host:fe\_http\_port 查看是否可以访问WebUI界面,登录账号默认为root/admin,密码为空,第一次登录WebUI界面会有较长时间加载时间5.查看日志在/opt/doris/fe/log
6.ctrl + D 退出docker
注:如果在 fe.log 中查看不到启动失败的信息,也许在 fe.out 中可以看到。
7.安装MySQL客户端(本地)
wget -c mirrors.ustc.edu.cn/mysql-ftp/D…
tar -xvf mysql-5.7.37-1.el7.x86_64.rpm-bundle.tar
rpm -ivh mysql-community-common-5.7.37-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.37-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.37-1.el7.x86_64.rpm
8.连接FE并修改密码(本地)
mysql -h FE-Docer的IP -P 9030 -uroot
SET PASSWORD FOR 'root' = PASSWORD('your_password');也可以创建新用户
CREATE USER 'test' IDENTIFIED BY 'test_passwd';
9.后续链接时需要使用如下格式(本地)
mysql -h FE_HOST -P9030 -uusername -ppassword
10.添加BE节点注册信息(本地)
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新