10.2.6 Hadoop管理命令
在了解扩展的监控管理工具的同时,也不能忘记Hadoop本身为我们提供了相应的系统管理工具,本节我们就对相关的工具进行介绍。
1.dfsadmin
dfsadmin是一个多任务的工具,我们可以使用它来获取HDFS的状态信息,以及在HDFS上执行的管理操作。管理员可以在终端中通过Hadoop dfsadmin命令调用它,这里需要使用超级用户权限。dfsadmin相关的命令如表10-2所示。
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。