10.2.6 Hadoop管理命令

在了解扩展的监控管理工具的同时,也不能忘记Hadoop本身为我们提供了相应的系统管理工具,本节我们就对相关的工具进行介绍。

1.dfsadmin

dfsadmin是一个多任务的工具,我们可以使用它来获取HDFS的状态信息,以及在HDFS上执行的管理操作。管理员可以在终端中通过Hadoop dfsadmin命令调用它,这里需要使用超级用户权限。dfsadmin相关的命令如表10-2所示。

10.2.6 Hadoop管理命令 - 图1

2.文件系统验证(fsck)

Hadoop提供了fsck工具来验证HDFS中的文件是否正常可用。这个工具可以检测文件块是否在DataNode中丢失,是否低于或高于文件副本要求。下面给出使用的例子:


hadoop fsck/

……Status:HEALTHY

Total size:511799225 B

Total dirs:10

Total files:22

Total blocks(validated):22(avg.block size 23263601 B)

Minimally replicated blocks:22(100.0%)

Over-replicated blocks:0(0.0%)

Under-replicated blocks:0(0.0%)

Mis-replicated blocks:0(0.0%)

Default replication factor:3

Average block replication:3.0

Corrupt blocks:0

Missing replicas:0(0.0%)

Number of data-nodes:4

Number of racks:1

The filesystem under path'/'is HEALTHY


fsck会递归遍历文件系统的Namespace,从文件系统的根目录开始检测它所找到的全部文件,并在它验证过的文件上标记一个点。要检查一个文件,fsck首先会检索元数据中文件的块,然后查看是否有问题或是否一致。这里需要注意的是,fsck验证只和NameNode通信而不和DataNode通信。

以下是几种fsck的输出情况。

(1)Over-replicated blocks

Over-replicated blocks用来指明一些文件块副本数超出了它所属文件的限定。通常来说,过量的副本数存在并不是问题,HDFS会自动删除多余的副本。

(2)Under-replicated blocks

Under-replicated blocks用来指明文件块数未达到所属文件要求的副本数量。HDFS也会自动创建新的块直到该块的副本数能够达到要求。可以通过hadoop dfsadmin-metasave命令获得正在被复制的块信息。

(3)Misreplicated blocks

Misreplicated blocks用来指明不满足块副本存储位置策略的块。例如,假设副本因子为3,如果一个块的所有副本都存在于一个机器中,那么这个块就是Misreplicated blocks。针对这个问题,HDFS不会自动调整。我们只能通过手动设置来提高该文件的副本数,然后再将它的副本数设置为正常值来解决这个问题。

(4)Corrupt blocks

Corrupt blocks用来指明所有的块副本全部出现问题。只要块存在的副本可用,它就不会被报告为Corrupt blocks。NameNode会使用没有出现问题的块进行复制操作,直到达到目标值。

(5)Missing replicas

Missing replicas用来表明集群中不存在副本的文件块。

Missing replicas及Corrupt blocks被关注得最多,因为出现这两种情况意味着数据的丢失。fsck默认不去处理那些丢失或出现问题的文件块,但是可以通过命令使其执行以下操作:

通过-move,将出现问题的文件放入HDFS的/lost+found文件夹下。

通过-delete选项将出现问题的文件删除,删除后即不可恢复。

3.找到某个文件的所有块

fsck提供一种简单的方法用于查找属于某个文件的所有块,代码如下:


hadoop fsck/user/admin/In/hello.txt-files-blocks-racks

/user/admin/In/hello.txt 13 bytes,1 block(s):OK

0.blk_-8114668855310504639_1056 len=13 repl=1[/default-rack/127.0.0.1:50010]

Status:HEALTHY

Total size:13 B

Total dirs:0

Total files:1

Total blocks(validated):1(avg.block size 13 B)

Minimally replicated blocks:1(100.0%)

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:1.0

Corrupt blocks:0

Missing replicas:0(0.0%)

Number of data-nodes:1

Number of racks:1

The filesystem under path'/user/admin/In/hello.txt'is HEALTHY


从以上输出中可以看到:文件hello.txt由一个块组成,并且命令也返回了它所在的DataNode。fsck的选项如下:

-files,显示文件的文件名称、大小、块数量及是否可用(是否存在丢失的块);

-blocks,显示每个块在文件中的信息,一个块用一行显示;

-racks,展示了每个块所处的机架位置及DataNode的位置。

运行fsck命令,如果不加选项,则执行以上所有指令。

4.DataNode块扫描任务

每个DataNode都会执行一个块扫描任务,它会周期性地验证它所存储的块,这就允许有问题的块能够在客户端读取时被删除或修整。DataBlockScanner可维护一个块列表,它会一个一个地扫描这些块,并进行校验和验证。

进行块验证的周期可以通过dfs.DataNode.scan.period.hours属性值来设定,默认为504小时,即3周。出现问题的块将会被报告给NameNode进行处理。

也可以通过访问DataNode的Web接口获得块验证的信息:http://datanodeIP:50075/block ScannerReport。下面是一个报告的样本。


Total Blocks:32

Verified in last hour:1

Verified in last day:1

Verified in last week:12

Verified in last four weeks:31

Verified in SCAN_PERIOD:31

Not yet verified:1

Verified since restart:2

Scans since restart:2

Scan errors since restart:0

Transient scan errors:0

Current scan rate limit KBps:1024

Progress this period:8%

Time left in cur period:99.96%


通过附加后缀listblocks(http://datanodeIP:50075/blockScannerReport?listblocks),报告会在前面这个DataNode中加入所有块的最新验证状态信息。

5.均衡器(balancer)

由于HDFS不间断地运行,隔一段时间可能就会出现文件在集群中分布不均匀的情况。一个不平衡的集群会影响系统资源的充分利用,所以我们要想办法避免这种情况。

balancer程序是Hadoop的守护进程,它会通过将文件块从高负载的DataNode转移到低使用率的DataNode上,即进行文件块的重新分布,以达到集群的平衡。同时还要考虑HDFS的块副本分配策略。balancer的目的是使集群达到相对平衡,这里的相对平衡是指每个DataNode的磁盘使用率和整个集群的资源使用率的差值小于给定的阈值。我们可以通过这样的命令运行balancer程序:start-balancer.sh。-threshold参数设定了多个可以接受的集群平衡点。超过这个平衡预置就要进行平衡调整,对文件块进行重分布。这个参数值在大多数情况下为10%,当然也可通过命令行设置。balancer被设计为运行于集群后台中,不会增加集群运行负担。我们可以通过参数设置来限制balancer在执行DataNode之间的数据转移时占用的带宽资源。这个属性值可以通过hdfs-site.xml配置文件中的dfs.balance.bandwidthPerSec属性进行修改,默认为1MB。