文档章节

NameNode HA的实现原理

JPblog
 JPblog
发布于 2017/12/26 19:35
字数 949
阅读 147
收藏 0

1. NameNode HA架构概述

实现架构:

组件描述:

Active NN和Standby NN:两台 NameNode 形成互备,一台处于 Active 状态,另外一台处于 Standby 状态,只有主 NameNode 才能对外提供读写服务。

主备切换控制器 ZKFC:ZKFailoverController 作为独立的进程运行,对 NameNode 的主备切换进行总体控制。ZKFC能及时检测到 NameNode 健康状况,在主 NameNode 故障时借助 Zookeeper 实现自动的主备选举和切换,当然 NameNode 目前也支持不依赖于 Zookeeper 的手动主备切换。

Zookeeper 集群:为主备切换控制器提供主备选举支持。

共享存储系统:共享存储系统保存了 NameNode 在运行过程中所产生的 HDFS 元数据。Active NN 和standby NN 通过共享存储系统实现元数据同步。在进行主备切换的时候,新的主 NameNode 在确认元数据完全同步之后才能继续对外提供服务。

DataNode 节点:两NN之间除了共享HDFS 元数据信息之外,还需要共享 HDFS 的数据块和 DataNode 之间的映射关系。DataNode 会同时向主 NameNode 和备 NameNode 上报数据块的位置信息。

2. NameNode HA实现原理

实现架构:

切换流程:

  1. HealthMonitor 初始化完成之后会启动内部的线程来定时调用对应 NameNode 的 HAServiceProtocol RPC 接口的方法,对 NameNode 的健康状态进行检测。
  2. HealthMonitor 如果检测到 NameNode 的健康状态发生变化,会回调 ZKFailoverController 注册的相应方法进行处理。
  3. 如果 ZKFailoverController 判断需要进行主备切换,会首先使用 ActiveStandbyElector 来进行自动的主备选举。
  4. ActiveStandbyElector 与 Zookeeper 进行交互完成自动的主备选举。
  5. ActiveStandbyElector 在主备选举完成后,会回调 ZKFailoverController 的相应方法来通知当前的 NameNode 成为主 NameNode 或备 NameNode。
  6. ZKFailoverController 调用对应 NameNode 的 HAServiceProtocol RPC 接口的方法将 NameNode 转换为 Active 状态或 Standby 状态。

3. NameNode 共享存储

基于QJM的共享存储的数据同步机制:

机制描述:

基于 QJM 的共享存储主要用于保存 EditLog,FSImage 文件还是在 NameNode 的本地磁盘上。多个JournalNode 构成的集群来存储 EditLog,每个 JournalNode 保存同样的 EditLog 副本。每次 NameNode 写 EditLog 的时候,除了向本地磁盘写入 EditLog 之外,也会并行地向 JournalNode 集群之中的每一个 JournalNode 发送写请求,只要大多数 (majority) 的 JournalNode 节点返回成功就认为向 JournalNode 集群写入 EditLog 成功。如果有 2N+1 台 JournalNode,那么根据大多数的原则,最多可以容忍有 N 台 JournalNode 节点挂掉。

基于QJM的共享存储的数据恢复机制:

处于 Standby 状态的 NameNode 转换为 Active 状态的时候,有可能上一个 Active NameNode 发生了异常退出,那么 JournalNode 集群中各个 JournalNode 上的 EditLog 就可能会处于不一致的状态,所以首先要做的事情就是让 JournalNode 集群中各个节点上的 EditLog 恢复为一致。另外如前所述,当前处于 Standby 状态的 NameNode 的内存中的文件系统镜像有很大的可能是落后于旧的 Active NameNode 的,所以在 JournalNode 集群中各个节点上的 EditLog 达成一致之后,接下来要做的事情就是从 JournalNode 集群上补齐落后的 EditLog。只有在这两步完成之后,当前新的 Active NameNode 才能安全地对外提供服务。

本文转载自:https://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-name-node/

上一篇: map任务数配置
下一篇: hadoop平台优化
JPblog
粉丝 17
博文 65
码字总数 42689
作品 0
朝阳
程序员
私信 提问
加载中

评论(0)

Hadoop基础之HA(高可用)

1.Hadoop2.0产生背景 早期的hadoop版本,NN(namenode)是HDFS集群的单点故障点,每一个集群只有一个NN,如果这个机器或进程不可用,整个集群就无法 使用。为了解决这个问题,出现了一堆针对HDF...

landy8530
2017/11/25
0
0
HDFS fsimage和edits合并实现原理

Hadoop 1.x 版本 fsimage和edits合并实现原理 在NameNode运行期间,HDFS的所有更新操作都是直接写到edits中,久而久之edits文件将会变得很大;虽然这对NameNode运行时候是没有什么影响的,但...

瑞查德-Jack
2019/01/03
64
0
Hadoop1.x和2.X的HDFS fsimage和edits文件运行机制对比

一、概述 之前写过一篇非常详细的,利用QJM在HDFS2.0部署HA策略的文章,主要说了利用QJM进行HA部署以及其原理(http://zengzhaozheng.blog.51cto.com/8219051/1441170 )。但是,其中没有详细...

zengzhaozheng
2018/07/02
0
0
Hadoop-2.6.0集群搭建(多机环境HDFS HA+YARN HA,推荐)

搭建 HDFS HA 和 ResourceManager HA 集群 下载Hadoop: http://hadoop.apache.org/releases.html 集群规划 HDFS HA说明 Hadoop 2.x中通常由两个NameNode组成,一个处于Active状态,另一个处...

翻船全靠浪
2016/04/25
66
0
大数据教程(11.1)HA机制以及设计思路的分析

上一章介绍了一些hadoop的实战分析案例,本章将介绍hadoop的高可用以及初步认识hive。 一、Hadoop的HA机制 前言:正式引入HA机制是从hadoop2.0开始,之前的版本中没有HA机制;HA的运作机制:...

em_aaron
2019/01/01
62
0

没有更多内容

加载失败,请刷新页面

加载更多

突破CRUD | 万能树工具类封装

0、学完本文你或许可以收获 感受一个树工具从初始逐步优化完善的过程 树工具封装的设计思考与实现思路 最后收获一款拿来即用的树工具源代码 对于前端树组件有一定了解和使用过的同学可直接跳...

风象南
29分钟前
123
0
精选开源SpringBoot项目:涵盖权限、搜索、秒杀、支付!

发文以来,分享了一些科技资讯,今天首次整理一些开源项目分享。既是对自己的学习督促,也是对有需要人的一种便利。 开源项目一: mall商城 star数:29.8k 项目地址:https://github.com/ma...

Java进阶程序员xx
39分钟前
70
0
Xilinx Zynq-7000 SoC高性能处理器的串口、CAN接口

TLZ7x-EasyEVM是广州创龙基于Xilinx Zynq-7000 SoC设计的高速数据采集处理开发板,采用核心板+底板的设计方式,尺寸为160mm*108mm,它主要帮助开发者快速评估核心板的性能。 核心板采用12层板...

Tronlong创龙
54分钟前
73
0
工作记录-图片高亮和 IE 下载图片错误

去年年底换了新的新项目组,又开始用自己喜欢的 angular 框架开发了,开心[眯眼笑]。这段时间做了几个需求,这里记录一下需要注意的几个点。 图片高亮功能 在原来的DOM层上添加遮罩,添加新的...

IrisHuang
今天
71
0
如何修复MacBook Pro过热:保持MacBook散热的13个技巧

尽管MacBook Pro是一台能处理繁重工作量的高能效机器,但它却无法像市场上其他笔记本电脑一样避免过热。至于什么可以防止发热,那不是一两个技巧就能解决的问题。相反,这是一组技巧可以解决...

mac小叮当
今天
49
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部