Dfsamin是一个用来获取HDFS文件系统实时状态信息的多任务工作,具有对于HDFS文件系统管理操作的功能。在拥有超级用户权限的前提下,管理员可以在终端中通过Hadoop dfsadmin对于其进行功能方法的调用。主要命令如下:

-report 主要用来获取文件系统的基本信息和统计信息

-safemodeenter!leave!get!wait 安全模式的维护命令。安全模式是NameNode的一种状态。在安全模式状态下:

1) 不接受对于空间名字的更改

2) 无法对数据块进行删除以及复制操作

NameNode会在Hadoop系统启动之后自动开启安全模式,一旦当配置块满足最小百分比的副本数条件时,Hadoop系统会自动关闭安全模式。同时根据用户的需要也可以手动关闭安全模式或者选择手动开启安全模式。

-refreshNode 重新读取hosts和exclude,以实现在添加新的节点后可以使系统直接进行识别。

-finalizeUpgrade用于终结HDFS文件系统的升级操作。DataNode会删除上一个版本的工作目录。在DataNode完成操作之后,NameNode也会执行这个操作。

-upgradeProgressstatus!details!force 分别实现获取当前系统升级的状态,升级状态过程中的细节,强制进行系统的升级。

-metasavefilename 将hadoop系统中的管理节点的数据结构中的主要部分保存到hadoop.log.dir文件中提前预设好的属性中指定的的对应文件名的目录上。

在此文件中的主要内容如下:

1)      管理节点接收到的数据节点的正常工作的心跳

2)      被复制的数据块的等待状态

3)      被复制的数据块的执行状态

4)      确定要被删除的数据块的等待状态

-setQuota <quota> <dirname>…<dirname>主要用作为每个指定路径下的文件目录设

定指定的配额。目的是为了强制设定文件目录的名字的字节数。如果出现以下情况将会对Hadoop系统报出错误信息:

1)      文件目录的名字不是一个正整数

2)      当前的操作用户不具有管理员权限

3)      文件目录不存在或者此路径指向的是一个文件而非目录

4)      当设定好的目录生效时会超出新设定的配额

-clrQuota <dirname>….<dirname>为每个已经分配好的指定路径上的文件目录清除已经设定好的配额。当出现以下情况将会对Hadoop系统报出错误信息:

1) 此目录指定的目录不存在或者该目录为一个文件

2) 当前的操作用户不具有管理员权限

另外一种情况为如果此文件目录如果先前没有设定配额,则使用此操作不会向系统报错

-help [cmd] 显示对于在参数中给定的命令相关的帮主信息,如果在参数中没有给出指定的命令,将会显示出所有命令的帮主信息。

1.1 文件系统验证

在Hadoop系统中提供了一个用于验证HDFS文件系统中的文件是否可以完整读取的的验证命令fsck。主要用于检测文件是否在数据节点的文件中丢失,以及检测对于副本本身的要求过高还是过低。

1.1.1         Fsck的工作机理

Fsck是一款基于Hadoop的SHELL编程命令,通过参数来指定检查的文件以。

Fsck会递归检查整个HDFS文件系统的命名空间,首先从文件系统的root目录开始检测然后检测可以找到的所有文件,并且在验证完毕后对于这个查找到的文件进行一个标记。FSCK对于一个文件的检测主要从可用性和一致性入手。

    下面为Fsck的输出属性图:

1.1.2          Fsck输出参数说明:

(1)Over-replicated blocks:用来标识所拥有的副本块数已经超出自身所属文件的副本数配额限定的文件。HDFS文件系统在出现这种情况后系统会根据自身副本删除机制对多余的副本进行删除。

(2)Under-replicated blocks: 用来标识所拥有的副本块数未达到自身所属文件的副本数要求的文件。HDFS文件系统在出现这种情况后系统会根据自身副本创建机制自动创建副本直到到达文件要求的副本数。可以通过执行dfsadmin –metasave SHELL命令来获取当前正在被复制的块的信息。

(3)Misrepilcated blocks:用来标识云存储系统中不符合存储位置策略的块。比如说副本因子为3,则代表至少拥有2个副本不在同一个机架上。而如果出现了一个数据块的3个副本都在同一个机架上则此块将被标识。HDFS系统不会自动处理这种标识,需要我们手动设这副本因子的个数。

(4)Corrupt blocks:用来标识所有副本不可用的数据块,只要数据块的副本可用,它就不会被标识。Namenode将会使用没有被Corruptblocks标识的数据块来进行复制。以达到目标值。

(5)Missing replicas:用来标识机群中没有副本存在的数据块。Corrupt blocks 和Missing replicas是普遍受到最多关注的输出参数。出现以上标识则表明出现了数据不一致性和可用性的问题。

HDFS系统在遇见以上2种问题后可以通过使用如下SHELL脚本命令进行处理。

-move 将被标识的文件放入HDFS文件系统的/lost+found文件夹中。

-delete 将被标识的文件直接进行删除。