HDFS数据恢复模式
在现有的HDFS中,为了保证元数据的高可用性,我们可以在配置项dfs.namenode.name.dir中配置多个元数据存储目录来达到多备份的作用。这样一来,如果其中一个目录文件损坏了,我们可以选择另外可用的文件。那么问题来了,如果所有备用的元数据都损坏了,不能用了,这个时候怎么办,那么是否就意味着集群就永远启动不起来了呢?这将会是一个多么糟糕的结果啊。在这里,我们就要引出本文的主题:HDFS的数据恢复模式(Recovery Mode)。
其实就是元数据的自我恢复的启动模式,所以他并不是DataNode上真实数据的恢复。
另外,数据恢复针对的是editlog,而不是fsimage。
HDFS数据恢复模式的原理:
NameNode在启动的时候,会通过FSNamesystem加载fsimage文件和editlog. 如果Editlog文件有损坏,会导致NameNode启动异常,从而导致NameNode不能正常启动.
在Recovery Mode下,NameNode则会智能的跳过这些错误的情况,从而保证NameNode成功启动,启动之后,会生成一个新的FSImage,然后再次退出,下一次就可以正常的启动的集群了,因为现在用的是新的fsimage
第一步:使用hdfs命令: hdfs namenode -recover
第二步:NameNode启动,会根据参数recover,进入recover流程,NameNode.doRecovery(startOpt,conf);
private static void doRecovery(StartupOption startOpt, Configuration conf) throws IOException {
String nsId = DFSUtil.getNamenodeNameServiceId(conf);
String namenodeId = HAUtil.getNameNodeId(conf, nsId);
initializeGenericKeys(conf, nsId, namenodeId);
//省略
FSNamesystem fsn = null;
try {
//开始正式进入数据恢复流程
fsn = FSNamesystem.loadFromDisk(conf);
fsn.getFSImage().saveNamespace(fsn);
MetaRecoveryContext.LOG.info("RECOVERYCOMPLETE");
} catch (IOException e) {
MetaRecoveryContext.LOG.info("RECOVERYFAILED: caught exception", e);
throw e;
} catch (RuntimeException e) {
MetaRecoveryContext.LOG.info("RECOVERYFAILED: caught exception", e);
throw e;
} finally {
if (fsn != null)
fsn.close();
}
}
第三步: FSNamesystem调用loadFromDisk会判断参数是不是RECOVER,如果是RECOVER则会设置安全模式
第四步: 构造数据恢复上下文对象
MetaRecoveryContextrecovery = startOpt.createRecoveryContext();
final boolean staleImage = fsImage.recoverTransitionRead(startOpt, this, recovery);
第五步: recoverTransitionRead会调用loadFSImage方法,最后会调用到LoadEditRecords方法,如果文件损坏,如果不是recover模式,抛出异常;否则跳过错误记录,重新定位到下一个有效的操作记录
第六步:读完有效的editlog记录,就把它apply到内存
第七步:然后NameNode会执行一次saveNameSpace方法,就会生成一个新的FSImage文件
HDFS数据恢复模式相关推荐
- HDFS HA模式下支持只连接其中Active的NameNode
HDFS HA模式下支持只连接其中Active的NameNode:
- HDFS精华文章汇总
前言 自2015年下半年起,笔者开始写关于Hadoop的文章(主要集中在HDFS),包括源码分析类的,问题分析解决又或者是内部机制剖析.这些文章目前汇总数量已经达到70+篇.这些文章对于笔者来说是一个 ...
- 使用Cloudera Manager搭建zookeeper集群及HDFS HA实战篇
使用Cloudera Manager搭建zookeeper集群及HDFS HA实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.使用Cloudera Manager搭建zo ...
- iphone数据迁移到新iphone_Mac专业iPhone数据恢复软件----Omni Recover
Omni Recover mac是一个MacOS上的专业iPhone数据恢复软件,Omni Recover Mac版可以检索多达20多种类型的iOS数据,支持从iDevices恢复丢失的数据,轻松帮你 ...
- flume 一对多hdfs_10PB 规模的 HDFS 数据在 eBay 的迁移实战
导读 INTRODUCTION Hadoop分布式文件系统(HDFS)是指被设计成适合运行在通用硬件上的分布式文件系统(Distributed File System).本文将介绍eBay ADI H ...
- ONLY三行脚本, SQL数据恢复到指定时间点
经常看到有人误删数据,或者误操作,特别是Update和Delete的时候没有加WHERE ... 然后就喊爹喊娘了,怕是亲爹妈也无奈摇肩. 话说,如果没有犯过错误,那你还算是搞程序的吗?!没了偶尔的心 ...
- 大数据-HDFS 配置与使用
导语 在之前的分享中我们知道HDFS有三种模式:单机模式.伪集群模式和集群模式. 文章目录 HDFS 配置和启动 启动 HDFS HDFS 使用 HDFS Shell HDFS API 单机模式: ...
- sd卡测速工具_SD卡数据恢复教程与恢复方法
SD卡是很常用的数据存储设备之一,经常用来存储相片.视频.音频等重要数据.然而SD卡上的数据会因误删除.格式化.RAW分区等原因丢失,遇到SD卡数据丢失的问题该怎么办呢?别着急,其实恢复方法很简单,今 ...
- 免费回收站恢复软件有哪些?数据恢复软件,这三款就足够了
一般我们删除的东西会进入回收站里.如果电脑回收站没有被清空,那么打开它,就很容易找到自己的删除的文件.右键文件选择"恢复",删除的文件就能恢复到它原来的位置,再打开对应的文件夹就能 ...
最新文章
- jq 控制td只显示一行_9月22日现货黄金、白银TD、黄金TD、纸黄金、纸白银价格走势分析...
- bean加载时调用@value时会出现空指针异常_SpringMVC全局异常处理机制
- RTSP、RTMP和HTTP协议的区别
- linux下简单的备份的脚本 2 【转】
- 如何在 C# 9 中使用record类型?
- linux c之assert函数使用总结
- 云计算的基础设施服务
- 250分b区计算机专硕,2021兰州大学研究生复试分数线
- office 论文 页码_还在花钱找人排版?这份最全攻略,让你论文一次过!
- oracle下载安装教程
- Unity3D NGUI图文混排聊天表情
- 7分钟学会匿名管道pipe()的使用(内附完整代码测试)
- 模拟电子技术之运算放大器
- 记录一下blender烘焙光照漫反射贴图
- iOS组件化——蘑菇街案例分析
- 数据分析学习总结笔记01:情感分析
- C. Get an Even String
- 彻底解决电脑弹出USB设备时:提示该设备正在使用中无法弹出问题
- 7的整除特征 三位一截_小学数学竞赛七、数的整除特征(一)
- Raptor实践参考:要么错误要么求和
热门文章
- tomcat 在WIN10 上运行出现500错误的解决方法
- pytorch得到中间层输出
- 2021辽宁高考成绩查询公布,2021辽宁高考成绩什么时候出
- oracle delete远程表,用脚本实现表的远程准实时同步
- java 等待提示 事件_Java,Jsp点击事件后,出现等沙漏,处理等待状态时,有提示在动,适合任何事件使用...
- easyui结合java,Spring+SpringMVC+MyBatis+easyUI整合基础篇(二)牛刀小试
- mysql df_DF学Mysql(一)——数据库基本操作
- spring学习笔记四(注入Bean属性)
- Java编写程序将数据存入Kafka中
- 有向图的强连通分量,割点与桥