HDFS中的fsck命令(检查数据块是否健康)

在HDFS中,提供了fsck命令,用于检查HDFS上文件和目录的健康状态、获取文件的block信息和位置信息等。

我们在master机器上执行hdfs fsck就可以看到这个命令的用法。

[[email protected] ~]$ hdfs fsck
Usage: hdfs fsck <path> [-list-corruptfileblocks | [-move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]]] [-includeSnapshots] [-storagepolicies] [-blockId <blk_Id>]
	<path>	start checking from this path
	-move	move corrupted files to /lost+found
	-delete	delete corrupted files
	-files	print out files being checked
	-openforwrite	print out files opened for write
	-includeSnapshots	include snapshot data if the given path indicates a snapshottable directory or there are snapshottable directories under it
	-list-corruptfileblocks	print out list of missing blocks and files they belong to
	-blocks	print out block report
	-locations	print out locations for every block
	-racks	print out network topology for data-node locations
	-storagepolicies	print out storage policy summary for the blocks
	-blockId	print out which file this blockId belongs to, locations (nodes, racks) of this block, and other diagnostics info (under replicated, corrupted or not, etc)

查看文件目录的健康信息

执行如下的命令:

hdfs fsck /user/hadoop-twq/cmd

可以查看/user/hadoop-twq/cmd目录的健康信息:

其中有一个比较重要的信息,就是Corrupt blocks,表示损坏的数据块的数量

查看文件中损坏的块 (-list-corruptfileblocks)

[[email protected] ~]$ hdfs fsck /user/hadoop-twq/cmd -list-corruptfileblocks
Connecting to namenode via http://master:50070/fsck?ugi=hadoop-twq&listcorruptfileblocks=1&path=%2Fuser%2Fhadoop-twq%2Fcmd
The filesystem under path ‘/user/hadoop-twq/cmd‘ has 0 CORRUPT files

上面的命令可以找到某个目录下面的损坏的数据块,但是上面表示没有看到坏的数据块

损坏文件的处理

将损坏的文件移动至/lost+found目录 (-move)

hdfs fsck /user/hadoop-twq/cmd -move

 删除有损坏数据块的文件 (-delete)

hdfs fsck /user/hadoop-twq/cmd -delete

检查并列出所有文件状态(-files)

执行如下的命令:

hdfs fsck /user/hadoop-twq/cmd -files

 显示结果如下:

 

上面的命令可以检查指定路径下的所有文件的信息,包括:数据块的数量以及数据块的备份情况

检查并打印正在被打开执行写操作的文件(-openforwrite)

执行下面的命令可以检查指定路径下面的哪些文件正在执行写操作:

hdfs fsck /user/hadoop-twq/cmd -openforwrite

打印文件的Block报告(-blocks)

 执行下面的命令,可以查看一个指定文件的所有的Block详细信息,需要和-files一起使用: 

hdfs fsck /user/hadoop-twq/cmd/big_file.txt -files -blocks

  结果如下:

如果,我们在上面的命令再加上-locations的话,就是表示还需要打印每一个数据块的位置信息,如下命令:

hdfs fsck /user/hadoop-twq/cmd/big_file.txt -files -blocks -locations

  结果如下:

如果,我们在上面的命令再加上-racks的话,就是表示还需要打印每一个数据块的位置所在的机架信息,如下命令:

hdfs fsck /user/hadoop-twq/cmd/big_file.txt -files -blocks -locations -racks

  结果如下:

hdfs fsck的使用场景

场景一

当我们执行如下的命令:

hdfs fsck /user/hadoop-twq/cmd

可以查看/user/hadoop-twq/cmd目录的健康信息:   

我们可以看出,有两个文件的数据块的备份数量不足,这个我们可以通过如下的命令,重新设置两个文件数据块的备份数:

## 将文件big_file.txt对应的数据块备份数设置为1
hadoop fs -setrep -w 1 /user/hadoop-twq/cmd/big_file.txt
## 将文件parameter_test.txt对应的数据块备份数设置为1
hadoop fs -setrep -w 1 /user/hadoop-twq/cmd/parameter_test.txt

上面命令中 -w 参数表示等待备份数到达指定的备份数,加上这个参数后再执行的话,则需要比较长的时间  

执行完上面的命令后,我们再来执行下面的命令:

hdfs fsck /user/hadoop-twq/cmd

结果如下:

  

场景二

当我们访问HDFS的WEB UI的时候,出现了如下的警告信息:

表明有一个数据块丢失了,这个时候我们执行下面的命令来确定是哪一个文件的数据块丢失了:

[[email protected] ~]$ hdfs fsck / -list-corruptfileblocks
Connecting to namenode via http://master:50070/fsck?ugi=hadoop-twq&listcorruptfileblocks=1&path=%2F
The list of corrupt files under path ‘/‘ are:
blk_1073744153	/tmp/hadoop-yarn/staging/history/done_intermediate/hadoop-twq/job_1528682852398_0015_conf.xml
The filesystem under path ‘/‘ has 1 CORRUPT files

  

发现是数据块blk_1073744153丢失了,这个数据块是淑文文件/tmp/hadoop-yarn/staging/history/done_intermediate/hadoop-twq/job_1528682852398_0015_conf.xml的。

如果出现这种场景是因为在DataNode中没有这个数据块,但是在NameNode的元数据中有这个数据块的信息,我们可以执行下面的命令,把这些没用的数据块信息删除掉,如下:

[[email protected] ~]$ hdfs fsck /tmp/hadoop-yarn/staging/history/done_intermediate/hadoop-twq/ -delete
Connecting to namenode via http://master:50070/fsck?ugi=hadoop-twq&delete=1&path=%2Ftmp%2Fhadoop-yarn%2Fstaging%2Fhistory%2Fdone_intermediate%2Fhadoop-twq
FSCK started by hadoop-twq (auth:SIMPLE) from /192.168.126.130 for path /tmp/hadoop-yarn/staging/history/done_intermediate/hadoop-twq at Tue Mar 05 19:18:00 EST 2019
....................................................................................................
..
/tmp/hadoop-yarn/staging/history/done_intermediate/hadoop-twq/job_1528682852398_0015_conf.xml: CORRUPT blockpool BP-1639452328-192.168.126.130-1525478508894 block blk_1073744153

/tmp/hadoop-yarn/staging/history/done_intermediate/hadoop-twq/job_1528682852398_0015_conf.xml: MISSING 1 blocks of total size 220262 B...................................................................................................
....................................................................................................
........................Status: CORRUPT
 Total size:	28418833 B
 Total dirs:	1
 Total files:	324
 Total symlinks:		0
 Total blocks (validated):	324 (avg. block size 87712 B)
  ********************************
  UNDER MIN REPL‘D BLOCKS:	1 (0.30864197 %)
  dfs.namenode.replication.min:	1
  CORRUPT FILES:	1
  MISSING BLOCKS:	1
  MISSING SIZE:		220262 B
  CORRUPT BLOCKS: 	1
  ********************************
 Minimally replicated blocks:	323 (99.69136 %)
 Over-replicated blocks:	0 (0.0 %)
 Under-replicated blocks:	0 (0.0 %)
 Mis-replicated blocks:		0 (0.0 %)
 Default replication factor:	1
 Average block replication:	0.99691355
 Corrupt blocks:		1
 Missing replicas:		0 (0.0 %)
 Number of data-nodes:		2
 Number of racks:		1
FSCK ended at Tue Mar 05 19:18:01 EST 2019 in 215 milliseconds

  然后执行:

[[email protected] ~]$ hdfs fsck / -list-corruptfileblocks
Connecting to namenode via http://master:50070/fsck?ugi=hadoop-twq&listcorruptfileblocks=1&path=%2F
The filesystem under path ‘/‘ has 0 CORRUPT files

  

丢失的数据块没有的,被删除了。我们也可以刷新WEB UI,也没有了警告信息:

原文地址:https://www.cnblogs.com/tesla-turing/p/11487899.html

时间: 2024-07-31 10:54:50

HDFS中的fsck命令(检查数据块是否健康)的相关文章

利用describe( )中的count来检查数据是否缺省

1 #-*- coding: utf-8 -*- 2 #在python的pandas库中,只需要读入数据,然后使用describe()函数就可以查看数据的基本情况 3 import pandas as pd 4 inputDataSources = '../data/data.xls' 5 data = pd.read_excel(inputDataSources, index_col=u'日期') #读取数据,指定'日期'列为索引行 6 print data.describe() 7 prin

检查数据块是否是脏块

HDFS源码分析(三)-----数据块关系基本结构

前言 正如我在前面的文章中曾经写过,在HDFS中存在着两大关系模块,一个是文件与block数据块的关系,简称为第一关系,但是相比于第一个关系清晰的结构关系,HDFS的第二关系就没有这么简单了,第二关系自然是与数据节点相关,就是数据块与数据节点的映射关系,里面的有些过程的确是错综复杂的,这个也很好理解嘛,本身block块就很多,而且还有副本设置,然后一旦集群规模扩大,数据节点的数量也将会变大,如何处理此时的数据块与对应数据节点的映射就必然不是简单的事情了,所以这里有一点是比较特别的,随着系统的运行

使用Sqoop1.4.4将MySQL数据库表中数据导入到HDFS中

问题导读:         1.--connect参数作用? 2.使用哪个参数从控制台读取数据库访问密码? 3.Sqoop将关系型数据库表中数据导入HDFS基本参数要求及命令? 4.数据默认导入HDFS文件系统中的路径? 5.--columns参数的作用? 6.--where参数的作用? 一.部分关键参数介绍 参数介绍 --connect <jdbc-uri> 指定关系型数据库JDBC连接字符串 --connection-manager <class-name> 指定数据库使用的管

DataNode节点的数据块管理 FSVolumeSet、FSVolume

在分布式文件系统HDFS中,DataNode节点被用来存储文件的数据,确切的来说就是HDFS中的每一个文件是分块来存储的,一个文件可能有多个数据块,每一个数据块有多个副本,而且数据块的不同副本存储在不同的DataNode节点上,所以如果把整个HDFS集群看做一台机器的话,那么每一个DataNode节点就可以看做是一块存储磁盘.实际上,HDFS也正是这么干的.前面说过,每一个DataNode节点我们都可以为它配置多个本地存储路径,如果把这些本地存储路径统一看做一块磁盘的话,那每个存储路径就可以看做

Oracle 数据块损坏与恢复具体解释

1.什么是块损坏: 所谓损坏的数据块,是指块没有採用可识别的 Oracle 格式,或者其内容在内部不一致. 通常情况下,损坏是由硬件故障或操作系统问题引起的.Oracle 数据库将损坏的块标识为"逻辑损坏"或"介质损坏". 假设是逻辑损坏,则是 Oracle 内部错误. Oracle 数据库检測到不一致之后,就将逻辑损坏的块标记为损坏.假设是介质损坏,则是块格式不对:从磁盘读取的块不包括有意义的信息. 通过恢复块,或者删除包括损坏块的数据库对象(或同一时候採用这两种

Oracle 数据块损坏与恢复详解

1.什么是块损坏: 所谓损坏的数据块,是指块没有采用可识别的 Oracle 格式,或者其内容在内部不一致.通常情况下,损坏是由硬件故障或操作系统问题引起的.Oracle 数据库将损坏的块标识为"逻辑损坏"或"介质损坏".如果是逻辑损坏,则是 Oracle 内部错误.Oracle 数据库检测到不一致之后,就将逻辑损坏的块标记为损坏.如果是介质损坏,则是块格式不正确:从磁盘读取的块不包含有意义的信息. 通过恢复块,或者删除包含损坏块的数据库对象(或同时采用这两种方式),

HDFS中的数据流

博客内容来自我啃的Hadoop权威指南,记录一下帮助自己理一下思路 一.文件读取 步骤1,客户端通过调用 FileSystem 对象的 open() 方法来打开想读取的文件,对于 HDFS 来说,这个对象是分布式文件系统(DistributedFileSystem)的一个实例 步骤2,DistributedFileSystem 通过使用 RPC 来调用 namenode ,获取文件的存储位置,以确定文件起始块的位置.namenode 返回文件所有组成块的副本的 datanode 地址.并且这些

[网络课摘抄]5.2演示数据块整理(合并)的效果

1概念理解 由于对表空间进行频繁的DML操作,在空间的分配上势必会产生一些空间碎片影响系统效率.对磁盘碎片整理上可以使用的方法有重建表.move.shrink等.另一种情况是DELETE操作并不会回收HWM高水位线,ORACLE扫描表时依然是从第1个数据块扫描到HWM,当有新记录插入时,也是从HWM后开始插入,之前标记为删除的记录所占用的空间并没有释放,这不光影响了我们数据扫描的性能而且验证浪费了空间使用,下面我们就分别利用move\shrink两中技术来整理合并数据块. 2环境准备 创建一张表