当前位置: 首页 > news >正文

HDFS的启动流程和HA

HDFS的启动流程

  1. 当 NameNode 启动时HDFS首先将Fsimage读入内存对元数据进行恢复,然后再读edits文件中的更新操作在恢复后的元数据上进行执行,使得此时的NameNode中保存的是停止前的最新状态,然后删除旧的edits (这个过程称为检査点),最后等待各个DataNode向 NameNode 汇报文件块的信息来组装 block ID 映射关系。
  2. DataNode 启动时会扫描本地文件系统,产生一个本地文件对应的 HDFS 文件块的列表(每个文件块会对应一个本地文件),然后作为报告发送到 NameNode(这个报告称为块状态报告)。
  3. NameNode 在接收到每个 DataNode 的块汇报信息后,将其和所在的 DataNode 信息等保存在内存中。

HDFS的HA

Hadoop1.x 

如果 NameNode失效,可以通过 SecondaryNameNode 中保存的 FSImage 和 edits 数据恢复出 NameNode 最近的状态。

为了加快 NameNode 重启速度,SecondaryNameNode 还会定期合并 edits。

Hadoop2.x 

在这里插入图片描述

         任何时刻,只有一个 NameNode处于 Active状态,另一个处于 Standby 状态。Active NameNode 负责所有的客户端操作,而 Standby NameNode 只是简单的充当 Slave,它负责维护状态信息以便在需要时能快速切换。

主备切换控制器 ZKFailoverController

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

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

联邦模式


        通过阅读专栏之前的内容我们知道 HDFS 集群的元数据信息是存放在 NameNode 的内存中的,当集群扩大到一定的规模以后, NameNode 内存中存放的元数据信息可能会非常大,由于 HDFS 的所有的操作都会和 NameNode 进行交互, 当集群很大时, NameNode 会成为集群的瓶颈。

        在 Hadoop2.x 诞生之前,HDFS 中只能有一个命名空间,对于 HDFS 中的文件没有办法完成隔离。正因为如此,在 Hadoop2.x中引入了Federation的机制,可以解决如下场景的问题。

  1.         HDFS集群扩展性。多个 NameNode 分管一部分目录,使得一个集群可以扩展到更多节点,不再像 1.0 中由于内存的限制制约文件存储数目。
  2.         性能更高效。多个 NameNode 管理不同的数据,且同时对外提供服务,将为用户提供更高的读写吞吐率。
  3.         良好的隔离性。用户可根据需要将不同业务数据交由不同 NameNode 管理这样不同业务之间影响很小。

相关文章:

  • ISP算法----AWB总结及源代码
  • 【Java基础(六)】面向对象与类的基础知识
  • Python爬虫——BeautifulSoup的基本使用
  • Acwing 802. 区间和
  • 传统方式连接数据库的弊端和数据库连接池原理
  • 什么叫 “雪碧图”?
  • 公众号网课搜题题库使用方法
  • Excel中身份证号码相关操作详解
  • 如何用4行 C 代码实现一个跨平台的命令行 mp3 播放器
  • ES 查询用法
  • golang泛型
  • 如何快速安装JDK 1.8 以及配置环境变量
  • DataGrip 如何导出和恢复整个数据库数据,使用单个 SQL 文件
  • 基于SpringBoot+MyBatisPlus+DynamicDatasource+mysql的多数据源本地事务方案
  • 计算机毕业设计ssm+vue基本微信的健康食谱交流 论坛小程序
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • Java新版本的开发已正式进入轨道,版本号18.3
  • markdown编辑器简评
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Redis在Web项目中的应用与实践
  • STAR法则
  • 大主子表关联的性能优化方法
  • 当SetTimeout遇到了字符串
  • 仿天猫超市收藏抛物线动画工具库
  • 关于Java中分层中遇到的一些问题
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 阿里云重庆大学大数据训练营落地分享
  • 积累各种好的链接
  • ​比特币大跌的 2 个原因
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (1)STL算法之遍历容器
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (3)选择元素——(17)练习(Exercises)
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (pojstep1.1.2)2654(直叙式模拟)
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (windows2012共享文件夹和防火墙设置
  • (zt)最盛行的警世狂言(爆笑)
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (十三)Maven插件解析运行机制
  • (五)Python 垃圾回收机制
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)C#调用WebService 基础
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .Net8 Blazor 尝鲜