HDFS高级操作命令和工具
本文讲解HDFS 的一些高级操作功能,以及通过web 方式查看HDFS 信息的方法。
1. archive
在本地文件系统中,如果文件很少用,但又占用很大空间,可以将其压缩起来,以减少空间使用。在HDFS 中同样也会面临这种问题,一些小文件可能只有几KB 到几十KB,但是在DataNode 中也要单独为其分配一个几十MB 的数据块,同时还要在NameNode 中保存数据块的信息。如果小文件很多的话,对于NameNode 和DataNode 都会带来很大负担。所以HDFS中提供了archive 功能,将文件压缩起来,减少空间使用。
HDFS 的压缩文件的后缀名是.har,一个har 文件中包括文件的元数据(保存在_index和_masterindex)以及具体数据(保存在part-XX)。但是,HDFS 的压缩文件和本地文件系统的压缩文件不同的是:har 文件不能进行二次压缩;另外,har 文件中,原来文件的数据并没有变化,har 文件真正的作用是减少NameNode 和DataNode 过多的空间浪费。简单算一笔账,保存1000 个10K 的文件,不用archive 的话,要用64M×1000,也就是将近63G的空间来保存;用archive 的话,因为总数据量有10M(还需要加上这些文件的_index 和_masterindex,不过很小就是了),只需要一个数据块,也就是64M 的空间就够了。这样的话,节约的空间相当多;如果有十万百万的文件,那节省的空间会更可观。
将文件压缩成.har 文件的格式如下:
- hadoop archive -archiveName name -p <parent><src>*<dest> </span>
- hadoop archive -archiveName zoo.har -p /foo/bar /outputdir </span>
注意,.har 文件一旦创建之后就不能更改,也不能再次被压缩。如果想给.har 加文件,只能找到原来的文件,重新创建一个。
访问har 文件的内容可以通过指定URL har:///user/data/arch.har 来完成,所以可以通过上节提到的文件操作命令操作har,比如,显示har 文件内容可以用:
- hadoop dfs -ls har:///user/data/arch.har </span>
查看全部文件可以用:
- hadoop dfs -lsr har:///user/data/arch.har </span>
压缩完毕后,发现origin 的大小和har 文件中的part-XX 的大小一样,之所以一样的原因是har 压缩文件在文件的数据块占用上做了优化,但是文件本身并未发生变化,只是单纯连接到一起而已。
2. balancer
HDFS 并不会将数据块的副本在集群中均匀分布,一个重要原因就是在已存在的集群中添加和删除DataNode 被视作正常的情形。保存数据块时,NameNode 会从多个角度考虑DataNode 的选择,比如:将副本保存到与第一个副本所在DataNode 所属机架不同的机架上(这里的机架可以认为是若干DataNode 组成的“局域网”,机架内部的DataNode 之间的数据传输的代价远小于机架内部DataNode 和机架外部的数据传输)。
在与正写入文件数据的DataNode 相同的机架上,选择另外的DataNode 放一个副本。在满足以上条件之后,尽量将副本均匀分布。
在默认的副本因子为3 的集群中,一般情况下,数据块的存放策略如下:首先,选择一个DataNode 保存第一个副本;接下来,选择与第一副本所在DataNode 不同的机架保存第二个副本;最后,和第二个副本相同的机架中,选择另外一个DataNode 保存第三个副本。
如果管理员发现某些DataNode 保存数据过多,而某些DataNode 保存数据相对少,那么可以使用hadoop 提供的工具balancer,手动启动内部的均衡过程。
命令如下:
另外还有一种运行方式,在终端中输入如下命令:
可以启动后台守护进程,也能达到同样效果。-t 选项指定阈值。在“平衡”之后,进程退出,手动关闭进程的方式为:
3. distcp
distcp(distribution copy)用来在两个HDFS 之间拷贝数据。在HDFS 之间拷贝数据要考虑很多因素,比如,两个HDFS 的版本不同怎么办?两个HDFS 的数据块大小、副本因子各不相同,又该怎么办?不同的数据块分布在不同节点上,如何让传输效率尽量高,等等。
正因如此,HDFS 中专门用distcp 命令完成跨HDFS 数据拷贝。从/src/tools 子目录下的源代码中可以看出,distcp 是一个没有reducer 的MapReduce 过程。
distcp 命令格式如下:
Options 选项及含义如表所示:
注:不同版本的HDFS 可以通过http 协议拷贝,那么命令
可以写成:
4、dfsadmin
管理员可以通过dfsadmin 管理HDFS。支持的命令选项及含义如表:
HDFS 还提供了通过web 查看HDFS 信息的方式。HDFS 启动之后,会建立web服务,在默认情况下,访问http://namenode-name :50070 即可查看HDFS 的Name Node 信息,如图所示:
通过web 界面可以查看HDFS 的信息,包括总容量、可用容量、DataNodes 的信息、HDFS 运行目录等。点击“Browse the filesystem”可以查看HDFS 的目录结构,
点击“Live Nodes”可以查看当前有效的DataNode 的信息。