【大数据】记一次hadoop集群missing block问题排查和数据恢复

news2025/7/19 13:07:30

问题描述

集群环境总共有2个NN节点,3个JN节点,40个DN节点,基于hadoop-3.3.1的版本。集群采用的双副本,未使用ec纠删码。

问题如下:

bin/hdfs fsck -list-corruptfileblocks /
The list of corrupt files under path '/' are:
blk_1073779849  /warehouse/hive/customer_demographics/data-m-00488
blk_1073783404  /warehouse/hive/store_sales/data-m-00680
blk_1073786196  /warehouse/hive/catalog_sales/data-m-00015
blk_1073789561  /warehouse/hive/catalog_sales/data-m-00433
blk_1073798994  /warehouse/hive/web_sales/data-m-00214
blk_1073799110  /warehouse/hive/store_sales/data-m-00366
blk_1073800126  /warehouse/hive/web_sales/data-m-00336
blk_1073801710  /warehouse/hive/store_sales/data-m-00974
blk_1073807710  /warehouse/hive/inventory/data-m-01083
blk_1073809488  /warehouse/hive/store_sales/data-m-01035
blk_1073810929  /warehouse/hive/catalog_sales/data-m-01522
blk_1073811947  /warehouse/hive/customer_address/data-m-01304
blk_1073816024  /warehouse/hive/catalog_sales/data-m-01955
blk_1073819563  /warehouse/hive/web_sales/data-m-01265
blk_1073821438  /warehouse/hive/store_sales/data-m-01662
blk_1073822433  /warehouse/hive/web_sales/data-m-01696
blk_1073827763  /warehouse/hive/web_sales/data-m-01880
......

因为出现了missing block块高于namenode安全模式启动的阈值,导致namenode起来一直处于安全模式

namenode 的启动日志

2023-02-23 18:50:38,336 INFO org.apache.hadoop.hdfs.server.namenode.RedundantEditLogInputStream: Fast-forwarding stream 'http://journalnode-2:8480/getJournal?jid=cdp1&segmentTxId=225840498&storageInfo=-66%3A2104128967%3A1665026133759%3Acdp&inProgressOk=true' to transaction ID 225840498
2023-02-23 18:50:38,338 INFO org.apache.hadoop.hdfs.StateChange: STATE* Safe mode ON.
The reported blocks 3102206 needs additional 729 blocks to reach the threshold 0.9990 of total blocks 3106041.
The minimum number of live datanodes is not required. Safe mode will be turned off automatically once the thresholds have been reached.
2023-02-23 18:50:38,456 INFO org.apache.hadoop.hdfs.server.namenode.FSImage: Loaded 1 edits file(s) (the last named http:/journalnode-2:8480/getJournal?jid=cdp1&segmentTxId=225840498&storageInfo=-66%3A2104128967%3A1665026133759%3Acdp&inProgressOk=true, http://journalnode-1:8480/getJournal?jid=cdp1&segmentTxId=225840498&storageInfo=-66%3A2104128967%3A1665026133759%3Acdp&inProgressOk=true) of total size 1122.0, total edits 8.0, total load time 119.0 ms
2023-02-23 18:51:31,403 WARN org.apache.hadoop.hdfs.server.namenode.NameNode: Allowing manual HA control from 172.16.0.216 even though automatic HA is enabled, because the user specified the force flag

问题解决思路

找到缺失块所在的DN节点

集群在写数据的时候,Namenode会记录将数据块分配到那几个DN节点上,日志格式如下:

INFO org.apache.hadoop.hdfs.StateChange: BLOCK* allocate blk_1073807710, replicas=172.16.0.244:9866, 172.16.0.227:9866 for /warehouse/hive/inventory/data-m-01083

所以通过这个日志信息可以去全局查找日志中块缺失的相关信息,找到块所在的dn节点,然后登录到dn节点,找寻是否数据还在。
如果上述是双副本的,一个block块会有两个DN节点存储,能报上述missing block的信息,那么说明namenode中元数据记录的文件快和所有DN心跳的汇报块信息对不上,即DN汇报上来的块信息缺少了, 所以要么是blk对应的两个节点的数据都不见了(被删除或者清理了),或者两个节点同时宕机了,无法对外提供服务了。

接着上述的思路,去hdfs上排查这两个节点是否正常。

方式一:通过hdfs web界面上去查看dn的节点是否状态正常
在这里插入图片描述
确实有几个节点同时宕机了,上述只显示一个节点,是因为事后其他节点被我手动修复了。

方式二:通过命令行来排查

[root@namenode-2-0 hadoop-3.3.1]# bin/hdfs dfsadmin -report -dead
Configured Capacity: 63271003226112 (57.54 TB)
Present Capacity: 62179794033930 (56.55 TB)
DFS Remaining: 28580973518090 (25.99 TB)
DFS Used: 33598820515840 (30.56 TB)
DFS Used%: 54.03%
Replicated Blocks:
	Under replicated blocks: 0
	Blocks with corrupt replicas: 0
	Missing blocks: 0
	Missing blocks (with replication factor 1): 0
	Low redundancy blocks with highest priority to recover: 0
	Pending deletion blocks: 0
Erasure Coded Block Groups:
	Low redundancy block groups: 0
	Block groups with corrupt internal blocks: 0
	Missing block groups: 0
	Low redundancy blocks with highest priority to recover: 0
	Pending deletion blocks: 0

-------------------------------------------------
Dead datanodes (1):

Name: 172.16.1.8:9866 (datanode-16)
Hostname: 172.16.1.8
Decommission Status : Normal
Configured Capacity: 1437977346048 (1.31 TB)
DFS Used: 754816651264 (702.98 GB)
Non DFS Used: 22427271168 (20.89 GB)
DFS Remaining: 660731326464 (615.35 GB)
DFS Used%: 52.49%
DFS Remaining%: 45.95%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 0
Last contact: Sun Feb 19 20:00:51 CST 2023
Last Block Report: Sun Feb 19 14:24:53 CST 2023
Num of Blocks: 0

通过上述方式,能得出此节点有异常,进而可以到上述节点恢复数据

但是此时还无法判断,此节点上就一定存在着丢失数据块。

还需要继续登录到此节点上,在datanode数据目录下
BP-344496998-172.16.0.216-1665026133759/current/
find . -name “blk_*”
排查一下丢失的数据块是否还在此节点上。

数据恢复

重启宕机的DN节点

如果不是很严重的情况,比如硬件(硬盘,内存条,网络)等原因导致的节点宕机,那么登录到该节点,重启一下服务,DN服务正常启动后,会自动report自己本身机器上管理的blk_*块给到namenode,那么namenode就会自动恢复上述元数据信息。

bin/hdfs --daemon start datanode

查看日志。

节点无法启动,恢复数据

如果节点因为其他外部原因,导致没办法启动datanode服务,并且blk块数据还在硬盘上,那么此时只能通过拷贝blk块,并且手动触发 dn 节点汇报

正常 dn 节点 172.16.1.6 目录 /data/current/BP-344496998-172.16.0.216-1665026133759
损坏的 dn 节点 172.16.1.8 目录 /data/current/BP-344496998-172.16.0.216-1665026133759

操作步骤:

  • 拷贝数据节点
  • 手动触发汇报机制

拷贝数据节点脚本

ssh root@172.16.1.6

scp root@172.16.1.8:/data/current/BP-344496998-172.16.0.216-1665026133759 /data/current/BP-344496998-172.16.0.216-1665026133759

cd /data/current/BP-344496998-172.16.0.216-1665026133759
for i in `find . -name 'blk_*' -type f`;
do
  j=${i%/*}
  echo "mv ${i} .${j}"
  mv -f ${i} .${j}
done

# 最终形成的数据拷贝命令

mv ./current/finalized/subdir31/subdir31/blk_1105166085_31429045.meta ../current/finalized/subdir31/subdir31

......

最后触发DN汇报

bin/hdfs dfsadmin -triggerBlockReport 172.16.1.6:9876

最后数据完全恢复,missing block 问题也得到解决。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI算法创新赛-人车目标检测竞赛总结04

队伍:AI000038 小组成员:杨志强,林松 1. 算法介绍 1.1 相关工作 当前流行的目标检测算法主要分为三种,一阶段算法:SSD,FCOS,Scaled,YOLO系列等;二阶段算法&#xff1a…

宝塔搭建实战php悟空CRM前后端分离源码-后端server篇(一)

大家好啊,我是测评君,欢迎来到web测评。 有个朋友发消息跟我说,能不能让我录制一期一套开源的悟空CRM系统,然后网上搜了下,搭建起来测试后,感觉还不错,是一套前后端分离的CRM系统,前…

Java浅析电信数据采集

技术:Java等摘要:电信运营系统中,电信计费系统是主要的支撑系统,占有重要地位。对于电信计费系统是电信运营商的核心竞争力之一这一观点愈来愈被业界认同。电信计费系统中的数据蕴含着企业经营态势、客户群分布特征及消费习惯、各…

什么是隔离式数字输入?

隔离式数字输入与数字隔离器虽然它们听起来很相似,但隔离式数字输入和数字隔离器之间实际上存在一些值得注意的差异。看完这篇文章,希望大家能轻松分辨出两种隔离功能的区别。 内部结构 数字隔离器具有提供电流隔离数字信号路径的基本(或经…

网易的“草长莺飞二月天”:增长稳健,加码研发,逐浪AI

2月23日,网易发布了2022年第四季度财报。 这是网易与暴雪分道扬镳后的首份财报,加上近期AIGC热度扩散至游戏、教育等各个领域,网易第四季度业绩及其对于GPT等热门技术的探索受到市场关注。 根据财报,第四季度,网易营…

从单管单色到单管RGB,这项MicroLED工艺不可忽视

微显示技术商Porotech,在CES 2023期间展示了最新的MicroLED显示模组。近期,AR/VR光学领域的知名博主Karl Guttag深度分析了该公司的微显示技术,并指出Porotech带来了他见过最有趣的MicroLED技术。Guttag表示:Porotech是本届CES上给…

Airbyte的同步复制模式

ELT 哲学的核心原则,即数据在提取和加载阶段移动时应保持不变,以便始终可以在目标中访问原始数据。由于目标中存在数据的未修改版本,因此将来可以重新转换该版本,而无需从源系统重新同步数据。 基于此哲学,我们看看Air…

已经准备上千道软件测试面试题了,建议大家收藏!!!还有视频详解!

2023华为软件测试笔试面试真题,抓紧收藏不然就看不到了_测试小鬼的博客-CSDN博客_华为软件测试工程师面试题1、对计算机软件和硬件资源进行管理和控制的软件是(D)A.文件管理程序B.输入输出管理程序C.命令出来程序D.操作系统2、在没有需求文档…

C++类和对象:类的定义、类对象的存储、this指针

目录 一. 对于面向过程和面向对象的认识 二. 类 2.1 struct关键字定义类 2.1.1 C语言中的struct关键字 2.1.2 C中的struct关键字 2.2 class关键字 2.1 使用class关键字定义类 三. 类的访问限定及封装 3.1 类的访问权限及访问限定符 3.1.1 访问权限 3.1.2 访问限定…

3款百里挑一的国产软件,逆天好用,装了就舍不得卸载

推荐3款让你偷懒,让你上头的提效电脑软件,个个功能强大,让你远离加班! 很多几个小时才能做好的事情,用上它们,只需要5分钟就行!! 1、JNPF快速开发平台 JNPF 是一款精巧耐用的软件…

Linux 练习一(思维导图 + 练习过程)

文章目录一、Linux 用户管理及文件操作第一段练习记录:主要对用户进行删除添加设置密码等操作第二段练习记录:主要包括权限设置和查找命令第三段练习记录:关于文件的命令练习第四段练习记录:查找命令及查看内存命令的使用二、Linu…

Linux c:使用二级指针传参,交换两个字符串的函数测试

代码&#xff1a; #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> int swap1(char **p1, char **p2) { char * temp NULL; temp *p1; *p1 *p2; *p2…

C语言和C++的区别和联系,大多数人都说错了

前言 C语言和C到底是什么关系&#xff1f; 首先C和C语言本来就是两种不同的编程语言&#xff0c;但C确实是对C语言的扩充和延伸&#xff0c;并且对C语言提供后向兼容的能力。对于有些人说的C完全就包含了C语言的说法也并没有错。 C一开始被本贾尼斯特劳斯特卢普&#xff08;Bj…

【JDK8新特性之Stream流-Stream流常用的API以及案例实操】

JDK8新特性之Stream流&#xff0c;不知道你在投递简历的时候有没有看到JD(工作岗位要求去描述)上写到熟悉JDK中Stream流的相关使用。如果没有的话&#xff0c;接下来就和我一起学习一下吧 1.原始集合处理数据的弊端->Stream流优势之处&#xff0c;案例演示 自定义一个集合&…

通过操作Cortex-A7核,串口输入相应的命令,控制LED灯进行工作增加编程要求

2.编程要求&#xff1a; 1&#xff09;结构体封装 typedef struct{ char* cmd_arr; //命令行字符串 gpio_t* gpiox;//GPIO组号 unsigned int pin; //引脚编号 status_t status; //LED灯状态 void(*gpio_write_pin)(gpio_t* gpiox,unsigned int pin,status_t status); }cmd_t; 2…

【GlobalMapper精品教程】054:标签(标注)功能案例详解

同ArcGIS标注一样,globalmapper提供了动态标注的功能,称为标签,本文详解标签的使用方法。 文章目录 一、标签配置二、创建标签图层三、标签图层选项1. 标签字段2. 标签样式3. 标签格式4. 标签语言5. 标签优先级一、标签配置 在配置页面的【矢量显示】→标签选项卡下,有标签…

《高性能MySQL》读书笔记(上)

目录 MySQL的架构 MySQL中的锁 MySQL中的事务 事务特性 隔离级别 事务日志 多版本并发控制MVCC 影响MySQL性能的物理因素 InnoDB缓冲池 MySQL常用的数据类型以及优化 字符串类型 日期和时间类型 数据标识符 MySQL的架构 默认情况下&#xff0c;每个客户端连接都…

Java高级编程之Lambda表达式

Lambda表达式 1&#xff0c;语法 利用Lambda 可以更简洁的实现匿名内部类与函数声明与调用&#xff1b;另外&#xff0c;基于Lambda 提供stream 流式处理极大简化对集合的操作 public static void main(String[] args) {//1.标准Lambda使用方式,其中MathOperation为定义的一个…

React 跨域的配置

1、为什么会出现跨域&#xff1f; 浏览器遵循同源政策&#xff08;同源策略三要素&#xff1a;协议相同、域名相同、端口相同&#xff09; 2、配置跨域代理 使用中间件 http-proxy-middleware&#xff08;安装依赖&#xff09; npm install http-proxy-middleware 创建setupP…

为什么需要这个岗位,软件测试是干什么

目录 一、软件测试概念 二、软件测试目的 三、软件测试基本原则 四、软件测试主要工作内容 五、软件测试方法 六、测试工程师的职责 七、为什么要软件测试这个岗位 一、软件测试概念 软件测试&#xff1a;为了发现软件错误和缺陷&#xff08;统称bug&#xff09;而执行…