HA工作机制及namenode向QJM写数据流程
HA工作机制
(配置HA高可用传送门:https://www.cnblogs.com/zhqin/p/11904317.html)
HA:高可用(7*24小时不中断服务)
主要的HA是针对集群的master节点的,即namenode和resourcemanager,毕竟DataNode挂掉之后影响 不是特别大,重启就好了。
HDFS的HA
*HDFS HA功能通过配置Active/Standby两个NameNodes实现在集群中对NameNode的热备来解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,这时可通过此种方式将NameNode很快的切换到另外一台机器。*
两个namenode,暂且将其标记为active和standby,active为当前工作的机器,standby为替补,直接让二者之间直接通过网络通讯同步数据不太稳定,因为网络一旦断了,另一边节点就数据不完整。因此找到一个可靠的第三方,两个namenode都可以访问,因此效率高。
这样Active一直往这个第三方写数据,standby从这个第三方读数据就可以了。
我们想要实现的就是,如果active挂掉了,自动通知standby来顶替ative去运行。那么这个时候又需要一个可靠的第三方来负责通知,即ZooKeeper。
首先active在ZooKeeper中注册一个临时节点,另一个名称节点(standby)在ZooKeeper中看到ZooKeeper中有active的这个临时节点后,知道自己不能再是active节点了,所以现在他自己的角色就是standby,但是它会在ZooKeeper中注册监听,它会时刻监听着active这个节点,一旦active节点挂掉,ZooKeeper中注册的active就会消失,由于standby注册了监听,所以ZooKeeper会在第一时间通知standby节点,“告知”其active节点挂掉了。然后standby节点就“上位”成为active主namenode节点。
其中active其实并不是直接和ZooKeeper沟通,而是通过一个新进程——ZooKeeper客户端:ZooKeeper Failover controller(Zkfc)来进行沟通。Zkfc负责把主节点namenode的数据(状态信息)写入到ZooKeeper中。
那直接让namenode和ZooKeeper直接通信就好,为什么要加个Zkfc来负责namenode与ZooKeeper的通信呢?
因为HA高可用是在hadoop2.x之后出现的,这个时候Hadoop代码经过多年的迭代,有着较高的健壮性,而如果让namenode直接和ZooKeeper通信,需要去修改hadoop的代码,这样会降低hadoop代码的健壮性,所以为了不破坏hadoop代码的健壮性,在hadoop2.x的时代,就单独写了个进程:ZooKeeper Failover controller(Zkfc),但是这个进程本质上就是把原来打算让namenode自己完成的事情单独写成了一个进程,所以Zkfc这个进程是和namenode绑定的,换句话说就是,有namenode的地方就有Zkfc。Zkfc维持着active这个namenode和ZooKeeper之间的会话。另一边standby同理,也是通过另一个Zkfc来维持着standby和ZooKeeper之间的通信。
具体工作过程为:
如果Zkfc检测到active挂掉,Zkfc会把ZooKeeper中的临时节点释放掉,另外一边standby的Zkfc进程从ZooKeeper服务端接收到active挂掉的通知后,首先强行杀死之前的active节点(`ssh kill -9 namenode节点号`或者调用用户自定义的脚本),以防脑裂,然后将standby节点变为active节点。
说完ZooKeeper的通知机制之后,那么,active和standby读写数据的第三方是什么呢?
Quorum Journal Manager
大多数日志管理
其管理的就是hadoop的元数据,即edits.log
QJM也是一个集群,该集群也是单数台机器,写数据的时候也进行投票,其管理的是edits.log这个元数据。
和ZooKeeper集群类似,QJM集群中只要有一半以上的机器就不会挂。
namenode向QJM写数据的流程:
来一条写请求,然后写到edits里面,然后active会把edits写到
QJM集群里面,QJM这边同意写入,active才会将edits写入,(这里注意:QJM为了提高效率,只要超过半数的机器同意即可写入,这样以来QJM集群中不必所有机器都要求同步。)如果没有HA的时候,hadoop集群中2nn帮助namenode整合Fsimage,如果有了HA之后,就不需要2nn了,standby节点在监听active节点的同时,standby*实时*将active写入QJM集群中的edits读出到自己的内存中,这样保证了active一旦挂掉,standby这个节点可以随时顶上去接替active继续工作,然后standby定期把内存中的edits合成Fsimage,然后发送给active,所以说standby这个节点比2nn功能更强大,可以代替2nn。
HA工作机制及namenode向QJM写数据流程的更多相关文章
- HA工作机制
HA工作机制 HA:高可用(7*24小时不中断服务) 主要的HA是针对集群的master节点的,即namenode和resourcemanager,毕竟DataNode挂掉之后影响 不是特别大,重启就 ...
- day4-hdfs的核心工作原理\写数据流程 \读数据流程
namenode元数据管理要点 1.什么是元数据? hdfs的目录结构及每一个文件的块信息(块的id,块的副本数量,块的存放位置<datanode>) 2.元数据由谁负责管理? namen ...
- HDFS 读/写数据流程
1. HDFS 写数据流程 客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件, NameNode 检查目标文件是否已存在,父目录是否存在: NameNo ...
- Solr 写数据流程
Solr 写数据流程: 1.源字符串首先经过分词器处理,包括:拆分词以及去除stopword. 2.然后经过语言处理,包括大小写转换以及单词转换. 3.将源数据中需要的信息加入到Document中的各 ...
- kudu的写数据流程
写入操作是指需进行插入.更新或删除操作的一组行.需要注意的事项是Kudu强制执行主关键字的唯一性,主关键字是可以更改行的唯一标识符.为了强制执行此约束条件,Kudu必须以不同的方式处理插入和更新操作, ...
- HDFS数据流——写数据流程
剖析HDFS文件写入 假设文件ss.avi共200m,其写入HDFS指定路径/user/atguigu/ss.avi流程如下: 1)客户端向namenode请求上传文件到指定路径,namenode通过 ...
- Hadoop系列009-NameNode工作机制
本人微信公众号,欢迎扫码关注! NameNode工作机制 1 NameNode & SecondaryNameNode工作机制 1.1 第一阶段:namenode启动 1)第一次启动namen ...
- MapReduce06 MapReduce工作机制
目录 5 MapReduce工作机制(重点) 5.1 MapTask工作机制 5.2 ReduceTask工作机制 5.3 ReduceTask并行度决定机制 手动设置ReduceTask数量 测试R ...
- HDFS写数据和读数据流程
HDFS数据存储 HDFS client上传数据到HDFS时,首先,在本地缓存数据,当数据达到一个block大小时.请求NameNode分配一个block. NameNode会把block所在的Dat ...
随机推荐
- Asp.net webapi 判断请求参数是否为空简易方法 Model Validation 判断请求参数是否为空
通常情况下,对于那些经常为别人提供数据接口的开发人员来说,对于调用方传递过来的参数都会有验证处理.例如: if (string.IsNullOrEmpty(entity.Name)) { //当姓名为 ...
- java中token的生成和验证
package com.zjn.token; /** * token编码工具类 * @author ouyangjun */ public class TokenEncryptUtils { // 编 ...
- java代理(静态代理和jdk动态代理以及cglib代理)
版权声明:本文为Fighter168原创文章,未经允许不得转载. 目录(?)[+] 说到代理,脑袋中浮现一大堆代理相关的名词,代理模式,静态代理,jdk代理,cglib代理等等. 记忆特别深刻 ...
- Linux USB子系统(一)—— USB设备基础概念
一.基础概念 在终端用户看来,USB设备为主机提供了多种多样的附加功能,如文件传输,声音播放等,但对USB主机来说,它与所有USB设备的接口都是一致的.一个USB设备由3个功能模块组成:USB总线接口 ...
- Win10下mysql5.5和mysql8.0.19共存
Win10下mysql5.5和mysql8.0.19共存 需求:由于之前做的项目用的是mysql5.5,而新接的项目指定用mysql8,需要myql5..5和8同时存在运行. 前提:电脑已经安装mys ...
- 多线程并行_countDown
/** * 首次启动加载数据至缓存 */ public class ApplicationStartTask { private static Logger logger = LoggerFactor ...
- 第八章节 BJROBOT hector 算法构建地图【ROS全开源阿克曼转向智能网联无人驾驶车】
1.把小车平放在地板上,用资料里的虚拟机,打开一个终端 ssh 过去主控端启动roslaunch znjrobot bringup.launch. 2.在虚拟机端打开一个终端,ssh 过去主控端启动r ...
- count(*) 优化
几种获取记录数的方法 count(*): MySQL 优化过,扫描的行数小于总记录数.执行效率高. count(1): 遍历所有记录,不取值,对每行尝试添加一个 "1" 列,如果不 ...
- Liunx运维(十)-网络管理命令
文档目录: 一.ifconfig:配置或显示网络接口信息 二.ifup:激活网络接口 三.ifdown:禁用网络接口 四.route:显示或管理理由表 五.arp:管理系统的arp缓存 六.ip:网络 ...
- dede 织梦的安装 出现dir
安装dede系统.(如果您已经安装,请跳过本步.)直接运行:http://您的域名/install如果没有出现该页面,而是出现了一个空白页面写着dir 那么请删除install文件夹中的 instal ...