【HDFS】一次备NameNode宕机过久导致的生产事故

一次备NameNode宕机过久导致的生产事故

故障描述

最近发生的一个临时故障,情况是一个启了HA的HDFS集群,在2023年9月份因为两台NameNode同时启动产生一些问题,所以当时将一台节点停止,一直没有启动,具体为什么当时有问题这个不太清楚,这次是唯一活动的NameNode节点因为硬件问题突然挂死了,需要把当初一直停止的节点拉起来做Active NameNode保证集群的服务可用。

处理流程

由于从9月到现在已经过去4个多月,这个过程中由于一直是单节点运行且没有进行人工干预,所以产生了大量的editlog,这个时候启动NameNode就会花费大量时间去做editlog的加载,这个过程不可避免,只能等,否则数据会丢失:

image-20240105114525177

可以看到,NameNode启动的大部分时间都在加载editlog,总共1400多个editlog,每个大小大概400M,花费了18个多小时才完成加载:

image-20240105114441534

产生这么多edit原因:jn是存editlogfsimage的,它的数据从nn来,但不是两个nn都发送变更信息,其产生机制是,一个主nn负责接受请求,记录所有操作到edit,备nn在一直从主nn同步这些内容,然后备nn周期性checkpoint,写给jn集群,主nn再通过jn的变换,更改自己本地的fsimageedit,完成自己fsimage的更新,这就是checkpoint,所以之前备nn停了以后,nn自动进行checkpoint的机制就停了。

NameNode启动完成后,它会自动进行一次CheckPoint,生成最新的fsimage文件:

image-20240105175425180

随后,它会告诉JournalNode,删除过期的editlog,此时查看JournalNode的日志,可以看到它正在删除旧的editlog的日志。

image-20240105134559738

这里需要注意一个地方,那就是NameNodeJournalNode进行数据更新的时候,可能发生超时的情况:

image-20240105135956541

这是因为JournalNode那边太多editlog要进行删除,结果返回可能会慢一些,问题在于一旦超过超时限制,NameNode会被停掉,所以这一点一定要注意,可以在启动NameNode前提前更改相关配置来提高容错性:

    <property><name>dfs.qjournal.select-input-streams.timeout.ms</name><value>120000</value></property><property><name>dfs.qjournal.start-segment.timeout.ms</name><value>120000</value></property><property><name>dfs.qjournal.write-txns.timeout.ms</name><value>120000</value></property>

当启动的这个NameNode变成Active状态后,我们就可以尝试拉起另一个NameNode节点了:

如果NameNode没有变成Active,那么可能需要使用命令进行手动的切换

如果在拉起另一个NameNode节点时出现以下报错,需要人工介入:

2024-01-05 16:41:40,082 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: Failed to start namenode.
java.io.IOException: There appears to be a gap in the edit log.  We expected txid 22959333199, but got txid 25856535422.at org.apache.hadoop.hdfs.server.namenode.MetaRecoveryContext.editLogLoaderPrompt(MetaRecoveryContext.java:94)at org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.loadEditRecords(FSEditLogLoader.java:215)at org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.loadFSEdits(FSEditLogLoader.java:143)at org.apache.hadoop.hdfs.server.namenode.FSImage.loadEdits(FSImage.java:843)at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:698)at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:294)at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:975)at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:681)at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:585)at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:645)at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:812)at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:796)at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1493)at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1559)
2024-01-05 16:41:40,086 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1
2024-01-05 16:41:40,091 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: SHUTDOWN_MSG:

image-20240105171821728

执行下面的命令,尝试从当前的Active NameNode拉取最新的fsimage

hdfs namenode -bootstrapStandby

image-20240105175946751

24/01/05 17:24:05 INFO namenode.TransferFsImage: Downloaded file fsimage.ckpt_0000000025860457585 size 21353832867 bytes.
24/01/05 17:24:05 INFO util.ExitUtil: Exiting with status 0
24/01/05 17:24:05 INFO namenode.NameNode: SHUTDOWN_MSG: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/337563.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CH341 SPI方式烧录BK7231U

CH341是一个USB总线的转接芯片&#xff0c;通过USB总线提供异步串口、打印口、并口以及常用的2线和4线等同步串行接口。 BK7231U Wi-Fi SOC芯片&#xff0c;内嵌处理器。1. 符合802.11b/g/n 1x1协议 2. 17dBm 输出功率3. 支持20/40 MHz带宽和STBC 4. 支持Wi-Fi STA、AP、…

微服务下多模块拆分,公用类调用与模块隔离性怎么兼得呢

前言 在一个微服务项目中&#xff0c;为了追求低耦合&#xff0c;会根据业务板块对主系统进行切分为一个个子模块&#xff0c;模块间相互隔离&#xff0c;但是这样子就会导致一个问题&#xff1a;对于一些在多个子模块中都适用的配置类、工具类、封装类等都需要拷贝冗余到各个模…

从零开发短视频电商 Tesseract OCR 的 Java 拓展库 javacpp-presets

文章目录 简介添加依赖识别示例示例一 识别本地图片示例二 识别图像中的各个组件&#xff08;比如文本行&#xff0c;单词&#xff0c;或单个字符&#xff09;示例三 使用迭代器遍历识别结果及其选择项示例四 方向和脚本检测示例五 结果迭代器示例六 设置引擎、页面分割模式、语…

⭐Unity 将电脑打开的窗口画面显示在程序中

1.效果&#xff1a; 下载资源包地址&#xff1a; Unity中获取桌面窗口 2.下载uWindowCapturev1.1.2.unitypackage 放入Unity工程 3.打开Single Window场景&#xff0c;将组件UwcWindowTexture的PartialWindowTitle进行修改&#xff0c;我以腾讯会议为例 感谢大家的观看&#xf…

书生·浦语第三次作业

我最近在参加书生浦语大模型实战营&#xff0c;这是第三次作业打卡&#xff01; 如果你也想两周玩转大模型微调&#xff0c;部署与测评全链路。报名链接&#xff1a;invite 书生浦语大模型实战营报名 邀请码可以填026014 一、基础作业&#xff1a;复现课程知识库助手搭建过程…

亚马逊实时 AI 编程助手 CodeWhisperer使用体验

文章目录 1&#xff1a;什么是CodeWhisperer &#xff1f;2&#xff1a;试用3&#xff1a;上手体验 1&#xff1a;什么是CodeWhisperer &#xff1f; 最近ChatGPT展现出强大AI能力给我们带来了深刻的影响&#xff0c;AI现在不是一个概念&#xff0c;基于AI的产品一定在各行各业…

基于深度学习的果蔬检测识别系统(含UI界面、yolov8、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8 yolov8主要包含以下几种创新&#xff1a;         1. 添加注意力机制&#xff08;SE、CBAM等&#xff09;         2. 修改可变形卷积&#xff08;DySnake-主干c…

C++枚举类型可以作为返回值类型吗

当然&#xff1a; #include <iostream> // 定义一个枚举类型 enum class Color { RED, GREEN, BLUE }; // 函数返回枚举类型 Color getRandomColor() { static int nextColorIndex 0; Color color Color(nextColorIndex); nextColorIndex; if (nextColor…

简洁计算器Python代码

简洁的Python计算器&#xff0c;直接上代码&#xff08;用时10分钟&#xff09;&#xff1a; Python Gui图形化开发探索GUI开发的无限可能&#xff0c;使用强大的PyQt5、默认的Tkinter和跨平台的Kivy等工具&#xff0c;让Python成为你构建应用程序的得力助手。从本机用户界面到…

【Wordpress高级教程】 Wordpress免插件建立站群,wordpress整站迁移/安装

提示&#xff1a;该方法适用于Wordpress的站点&#xff0c;且无需插件哦&#xff08;插件一般都需要付费的&#xff0c;博主比较穷&#xff0c;我们就通过技术来解决&#xff09; 文章目录 前言一、准备工作二、搭建站群1.打包wp-content2.导入新站点3.导出数据库4.修改数据库配…

直播预告丨看零售场,如何玩转 MaaS

今年&#xff0c;有一个被频繁提及的词是MaaS 这类工具正在帮助千行百业实现大模型落地产业 在零售场&#xff0c;特别是像京东这样拥有超高并发、超复杂协同的电商场内 也沉淀出了一套通用的AI基础设施——九数算法中台 从提升客户服务体验、平台效率出发&#xff0c;训练各…

vue知识-03

购物车案例 要实现的功能&#xff1a; 1、计算商品总价格 2、全选框和取消全选框 3、商品数量的增加和减少 <body> <div id"app"><div class"row"><div class"col-md-6 col-md-offset-3"><h1 class"text-center…