大数据学习(03)——HDFS的高可用
高可用架构图
先上一张搜索来的图。

如上图,HDFS的高可用其实就是NameNode的高可用。
上一篇里,SecondaryNameNode是NameNode单节点部署才会有的角色,它只帮助NameNode完成日志合并的工作,在NameNode出现问题时不能顶上去。
在高可用里,不再有SecondaryNameNode这个角色,Hadoop2.x版本支持NameNode的一主一备,3.x版本支持一主多备,由备机完成日志合并任务。某个时点只有主NameNode对外提供服务。
总结一下,在一个高可用的HDFS集群里,至少需要这么几个角色:
- DataNode,存数据的节点,没它就不能叫文件系统了
- NameNode,有两个或多个,主节点状态是Active,备节点状态是Standby,备节点来同步、合并、推送主节点的FsImage
- 共享存储,存放的是主节点的实时日志,备节点从共享存储里异步同步日志,官方有QJM和NFS两种实现
为了实现NameNode的自动切换,还需要这两个角色:
- Zookeeper,分布式协调器,NameNode选主用的
- ZKFS,Zookeeper客户端,监控NameNode状态,并与Zookeeper保持长连接,与NameNode在一台机器上部署
高可用原理
它的高可用步骤如下:
- 在配置文件中配置多个NameNode属于同一个cluster,启动hdfs后,NameNode通过zookeeper选主
- 客户端通过dfs.client.failover.proxy.provider.[clusterID]配置的策略去访问NameNode,通常是向所有的NameNode发送请求来判断哪个是主节点
- 客户端对主NameNode发起的操作会同步写入共享存储,这里不直接写入其他NameNode是为了避免由于NameNode故障引起响应超时
- DataNode把文件的Block信息发送给所有的NameNode
- 备NameNode按照时间间隔或者日志文件大小来合并主NameNode的FsImage
- 如果主节点的NameNode或者ZKFS挂了
- 如果主NameNode挂了,本机的ZKFS会将ZK集群的锁释放,并回调其他ZKFS的方法,通知它们来拿锁。拿到锁的ZKFS连接一下原来的主NameNode,发现确实挂了,再把本机的NameNode状态由Standby修改为Active。
- 如果ZKFS挂了,ZKFS与ZK的TCP连接会断掉。ZK集群将删除该ZKFS持有的锁,并回调其他ZKFS的方法,通知它们来拿锁。拿到锁的ZKFS连接一下原来的主NameNode,发现它还活着,ZKFS先把原来的主NameNode降级为Standby,再把本机的NameNode升为Active。
高可用环境搭建
Hadoop的官方文档讲的很详细,参考 《用QJM实现HDFS的高可用》
HDFS联邦
一个主NameNode里存放的元数据毕竟容量有限,在数据量大的时候,很可能无法满足需要。
HDFS联邦机制类似于HDFS的分片存储,把所有元数据分散在多个NameNode里,互相没有交集。
那么客户端怎么知道要访问的数据该连接哪一个NameNode呢?这涉及到在多个NameNode之上增加一个抽象层的问题,由抽象层来确定到底该访问哪一个NameNode。
大数据学习(03)——HDFS的高可用的更多相关文章
- 大数据学习笔记——HDFS理论知识之编辑日志与镜像文件
HDFS文件系统——编辑日志和镜像文件详细介绍 我们知道,启动Hadoop之后,在主节点下会产生Namenode,即名称节点进程,该节点的目录下会保存一份元数据,用来记录文件的索引,而在从节点上即Da ...
- 入门大数据---基于Zookeeper搭建Kafka高可用集群
一.Zookeeper集群搭建 为保证集群高可用,Zookeeper 集群的节点数最好是奇数,最少有三个节点,所以这里搭建一个三个节点的集群. 1.1 下载 & 解压 下载对应版本 Zooke ...
- 入门大数据---基于Zookeeper搭建Spark高可用集群
一.集群规划 这里搭建一个 3 节点的 Spark 集群,其中三台主机上均部署 Worker 服务.同时为了保证高可用,除了在 hadoop001 上部署主 Master 服务外,还在 hadoop0 ...
- 大数据学习之HDFS基本API操作(下)06
hdfs文件流操作方法一: package it.dawn.HDFSPra; import java.io.BufferedReader; import java.io.FileInputStream ...
- 大数据学习之HDFS基本API操作(上)06
package it.dawn.HDFSPra; import java.io.FileNotFoundException; import java.io.IOException; import ja ...
- 大数据学习之hdfs集群安装部署04
1-> 集群的准备工作 1)关闭防火墙(进行远程连接) systemctl stop firewalld systemctl -disable firewalld 2)永久修改设置主机名 vi ...
- 大数据学习笔记——HDFS写入过程源码分析(2)
HDFS写入过程注释解读 & 源码分析 此篇博客承接上一篇未讲完的内容,将会着重分析一下在Namenode获取到元数据后,具体是如何向datanode节点写入真实的数据的 1. 框架图展示 在 ...
- 大数据学习笔记——HDFS写入过程源码分析(1)
HDFS写入过程方法调用逻辑 & 源码注释解读 前一篇介绍HDFS模块的博客中,我们重点从实践角度介绍了各种API如何使用以及IDEA的基本安装和配置步骤,而从这一篇开始,将会正式整理HDFS ...
- 大数据学习之HDFS基本命令操作05
1)hdfs的客户端 1.网页形式->测试用 http://192.168.40.11:50070/dfshealth.html#tab-overview 2.命令行形式->测试用 3.企 ...
- 大数据学习之HDFS的工作机制07
1:namenode+secondaryNameNode工作机制 2:datanode工作机制 3:HDFS中的通信(代理对象RPC) 下面用代码来实现基本的原理 1:服务端代码 package it ...
随机推荐
- 为你的Go应用创建轻量级Docker镜像?
缩小Go二进制文件大小 环境 youmen@youmendeMacBook-Pro % gcc -dumpversion 12.0.5 youmen@youmendeMacBook-Pro % go ...
- es6 快速入门 系列 —— promise
其他章节请看: es6 快速入门 系列 Promise Promise 是一种异步编程的选择 初步认识Promise 用 Promise 来实现这样一个功能:发送一个 ajax,返回后输出 json ...
- Gogs+Jenkins+Docker 自动化部署.NetCore
环境说明 腾讯云轻量服务器, 配置 1c 2g 6mb ,系统是 ubuntu 20.14,Docker 和 Jenkins 都在这台服务器上面, 群晖218+一台,Gogs 在这台服务器上. Doc ...
- HTTP Cookies知识-查看、发送、获取、返回
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 HTTP Cookies是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求 ...
- 对标 Spring Boot & Cloud ,轻量框架 Solon 1.5.8 发布
Solon 是一个轻量的Java基础开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Job.Micro service.WebS ...
- DNS 解析过程
DNS 是应用层协议,用于将域名转换成 IP 地址. 1. 解析过程 DNS 的核心系统是一个三层的树状.分布式服务,基本对应域名的结构. 根域名服务器:管理顶级域名服务器,返回 com.net.cn ...
- js笔记18
1.面向对象 (1)单例模式 (2)工厂模式 (3)构造函数 a.类 js天生自带的类 基类 object 子类 Function Array Number Math Boolean ...
- excel匹配函数vlookup和lookup
1.vlookup(查找的条件,查找的区域,满足查找条件后需要返回的值在选中的查找区域的第几列,精确匹配还是近似匹配(精确匹配为0或False表示,反之为1或True)) =VLOOKUP(J2,$G ...
- python3实现几种常见的排序算法
python3实现几种常见的排序算法 冒泡排序 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要 ...
- 44、wget和curl的常用参数
1.wget: wget是文件下载的工具: 不加任何参数是直接下载该文件: (1)-O: 将下载的文件指定为特定的文件名: wget -O baidu.html www.baidu.com --201 ...