hadoop edits 文件损坏修复办法
来源:互联网 发布:不可谓知类 编辑:程序博客网 时间:2024/05/08 18:42
文章来源:http://blog.csdn.net/wisgood/article/details/47066017?ref=myread
前段时间公司hadoop集群宕机,发现是namenode 磁盘满了。。清理出部分空间后,重启集群时,重启失败。
又发现集群Secondary namenode 服务也恰恰坏掉,导致所有的操作log持续写入edits.new 文件,等集群宕机的时候文件大小已经达到了丧心病狂的70G+..重启集群报错 加载edits文件失败。分析加载文件报错原因是磁盘不足导致最后写入的log只写入一半就宕机了。由于log不完整,hadoop再次启动加载edits文件时读取文件报错。由于edits.new 文件过大,存储了好多操作log,所以必须要对其进行修复。
尝试删除文件的最后几行,结果还是报错。于是查看源码对edits 文件结构进行分析发现是二进制格式,首行为版本号,然后是hadoop运行过程中的log记录内容,由操作码 +长度(非必须)+其他项组成。
edits文件格式分析图
解决办法
报错位置在源码中的方法为org.apache.hadoop.hdfs.server.namenode.FSEditLog.loadFSEdits(EditLogInputStream edits)方法中读取文件最后位置时因为缺少部分数据报错, 所以把这部分代码单独拿出来,去掉业务操作部分,只留读取过程,记录异常之前的文件长度len,然后将0到len 这部分的内容复制出来成新的edits文件。启动hadoop集群,成功!
NameNode启动加载元数据情景分析
NameNode函数里调用FSNamesystemm读取dfs.namenode.name.dir和dfs.namenode.edits.dir构建FSDirectory。
FSImage类recoverTransitionRead和saveNameSpace分别实现了元数据的检查、加载、内存合并和元数据的持久化存储。
saveNameSpace将元数据写入到磁盘,具体操作步骤:首先将current目录重命名为lastcheckpoint.tmp;然后在创建新的current目录,并保存文件;最后将lastcheckpoint.tmp重命名为privios.checkpoint.
checkPoint的过程:Secondary NameNode会通知nameNode产生一个edit log文件edits.new,之后所有的日志操作写入到edits.new文件中。接下来Secondary NameNode会从namenode下载fsimage和edits文件,进行合并产生新的fsimage.ckpt;然后Secondary会将fsimage.ckpt文件上传到namenode。最后namenode会重命名fsimage.ckpt为fsimage,edtis.new为edits;
PS:
最新的CDH版本的hadoop 集群启动可以对edits文件进行recover操作,跳过报错log
- hadoop edits 文件损坏修复办法
- hadoop edits 文件损坏修复办法
- 数据文件损坏修复办法
- ubuntu中的sudoers文件损坏,修复办法(附图、详细)
- 不能上网修复Winsock损坏的办法
- win7 system文件损坏修复办法(刚刚出锅的经验)
- 通过工具查看Hadoop的 fimage 文件和 edits 文件
- 修复mac文件已损坏
- hadoop文件损坏解决办法
- RAR文件解压缩时系统提示“CRC校验失败,文件被破坏”,修复损坏文件的办法!
- d盘结构损坏无法读取,有什么办法修复????
- SQL Server数据库损坏、检测以及简单的修复办法
- 如何尝试修复损坏的Access文件
- 请问如何修复损坏的jpg文件
- 完美修复损坏的系统文件
- XP系统system文件损坏的修复
- VMware虚拟机文件损坏修复方法
- 【Suse系统修复】磁盘文件损坏恢复
- 整数划分方案
- 使用Github创建个人主页
- Android:关闭软键盘自动弹出的解决方案
- iOS-UI-02 UILabel UIButton
- CSS中background-position的使用
- hadoop edits 文件损坏修复办法
- AVI视频文件格式
- CSS实现文字自动换行
- February 29 容斥定理 求闰年个数
- html5之canvas进阶
- 美丽新世界!
- iOS开发下载文件速度计算(刚刚)
- NSURLSession使用说明及后台工作流程分析
- 读书笔记MoreEffectiveC++(24)