namenode磁盘满引发recover edits文件报错

简介:       前段时间公司hadoop集群宕机,发现是namenode磁盘满了, 清理出部分空间后,重启集群时,重启失败。又发现集群Secondary namenode 服务也恰恰坏掉,导致所有的操作log持续写入edits.new 文件,等集群宕机的时候文件大小已经达到了丧心病狂的70G+..重启集群报错 加载edits文件失败。

      前段时间公司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;


目录
相关文章
|
8月前
|
人工智能 自然语言处理 API
ComfyUI-Copilot:阿里把AI助手塞进ComfyUI:一句话生成工作流,自动布线/调参/选模型,小白秒变大神!
ComfyUI-Copilot 是阿里推出的基于 ComfyUI 的 AI 智能助手,支持自然语言交互、智能节点推荐和自动工作流辅助,降低开发门槛并提升效率。
2143 6
ComfyUI-Copilot:阿里把AI助手塞进ComfyUI:一句话生成工作流,自动布线/调参/选模型,小白秒变大神!
|
8月前
|
存储 缓存 安全
Go 语言中的 Sync.Map 详解:并发安全的 Map 实现
`sync.Map` 是 Go 语言中用于并发安全操作的 Map 实现,适用于读多写少的场景。它通过两个底层 Map(`read` 和 `dirty`)实现读写分离,提供高效的读性能。主要方法包括 `Store`、`Load`、`Delete` 等。在大量写入时性能可能下降,需谨慎选择使用场景。
|
存储 分布式计算 Hadoop
Hadoop 3.x版本的新特性
【6月更文挑战第18天】
552 2
|
10月前
|
SQL 人工智能 自然语言处理
DataWorks年度发布:智能化湖仓一体数据开发与治理平台的演进
阿里云在过去15年中持续为268集团提供数据服务,积累了丰富的实践经验,并连续三年在IDC中国数据治理市场份额中排名第一。新一代智能数据开发平台DateWorks推出了全新的DateStudio IDE,支持湖仓一体化开发,新增Flink计算引擎和全面适配locs,优化工作流程系统和数据目录管理。同时,阿里云正式推出个人开发环境模式和个人Notebook,提升开发者体验和效率。此外,DateWorks Copilot通过自然语言生成SQL、代码补全等功能,显著提升了数据开发与分析的效率,已累计帮助开发者生成超过3200万行代码。
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,设置转发分享
本文介绍了Taro中`useShareAppMessage`的使用方法,需在页面配置`enableShareAppMessage: true`并重新编译。
646 0
Taro@3.x+Vue@3.x+TS开发微信小程序,设置转发分享
|
移动开发 JSON 前端开发
HTML5作业(四)-----饼状图和柱状图绘制【附源码】
该实验旨在熟悉HTML5 Canvas绘制图形和表单交互。用户需输入统计数据,程序将依据数据绘制饼状图和柱状图。要求验证用户输入有效性,点击按钮可切换图表类型,图上需显示数据标注。提供的代码包含一个表单用于输入JSON数据,两个绘制函数(drawPieChart、drawBarChart)用于生成饼状图和柱状图,以及输入验证和颜色生成辅助函数。
480 1
|
Linux 开发工具
详尽分享离线安装telnet
详尽分享离线安装telnet
1534 3
|
Linux Swift iOS开发
LLDB:强大的源代码级调试工具
LLDB:强大的源代码级调试工具
897 0
|
存储 缓存 Kubernetes
云原生时代下的12要素
现在各大企业都开始上云,上云有很多好处,其中之一就是有助于数字化转型。企业一旦上云,能大大提升数据搜集能力,计算能力调度及业务应用的整体能力,企业可以更容易的基于云化架构去做更多的场景落地。但上云并不意味着是真正的云原生(Cloud Native)。怎样才是真正的云原生呢?本文主要通过介绍云原生时代下应用需要遵循的12要素加以说明。
3985 0
|
机器学习/深度学习 监控 Ubuntu
【UR3系统升级到CB3.12附带URcap1.05】
【UR3系统升级到CB3.12附带URcap1.05】
478 0