HDFS高级操作命令和工具
2016-05-04 17:41
846 查看
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 文件的格式如下:
[java] view
plain copy
hadoop archive -archiveName name -p <parent><src>*<dest> </span>
[java] view
plain copy
hadoop archive -archiveName zoo.har -p /foo/bar /outputdir </span>
注意,.har 文件一旦创建之后就不能更改,也不能再次被压缩。如果想给.har 加文件,只能找到原来的文件,重新创建一个。
访问har 文件的内容可以通过指定URL har:///user/data/arch.har 来完成,所以可以通过上节提到的文件操作命令操作har,比如,显示har 文件内容可以用:
[java] view
plain copy
hadoop dfs -ls har:///user/data/arch.har </span>
查看全部文件可以用:
[java] view
plain copy
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,手动启动内部的均衡过程。
命令如下:
另外还有一种运行方式,在终端中输入如下命令:
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 的信息。
本文讲解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 文件的格式如下:
[java] view
plain copy
hadoop archive -archiveName name -p <parent><src>*<dest> </span>
[java] view
plain copy
hadoop archive -archiveName zoo.har -p /foo/bar /outputdir </span>
注意,.har 文件一旦创建之后就不能更改,也不能再次被压缩。如果想给.har 加文件,只能找到原来的文件,重新创建一个。
访问har 文件的内容可以通过指定URL har:///user/data/arch.har 来完成,所以可以通过上节提到的文件操作命令操作har,比如,显示har 文件内容可以用:
[java] view
plain copy
hadoop dfs -ls har:///user/data/arch.har </span>
查看全部文件可以用:
[java] view
plain copy
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,手动启动内部的均衡过程。
命令如下:
hadoop balancer [-threshold <threshold>]-threshold 参数是一个0 ~ 100 之间的实数,单位为百分比,默认值为10。这个参数表示:各个DataNode 的利用率(已用空间/ 可用空间)与整个集群的利用率的差值的绝对值的上限。也就是说,如果每个DataNode 的利用率和平均利用率相差不大(小于阈值)的话,可以认为这个集群已经“平衡”了。管理员可以通过Ctrl+C 手动打断balancer。
另外还有一种运行方式,在终端中输入如下命令:
start-balancer.sh[–t <therehold>]可以启动后台守护进程,也能达到同样效果。-t 选项指定阈值。在“平衡”之后,进程退出,手动关闭进程的方式为:
stop-balancer.sh3. distcp
distcp(distribution copy)用来在两个HDFS 之间拷贝数据。在HDFS 之间拷贝数据要考虑很多因素,比如,两个HDFS 的版本不同怎么办?两个HDFS 的数据块大小、副本因子各不相同,又该怎么办?不同的数据块分布在不同节点上,如何让传输效率尽量高,等等。
正因如此,HDFS 中专门用distcp 命令完成跨HDFS 数据拷贝。从/src/tools 子目录下的源代码中可以看出,distcp 是一个没有reducer 的MapReduce 过程。
distcp 命令格式如下:
hadoop distcp [options] <srcurl>*<desturl><srcurl><desturl> 就是源文件和目标文件的路径,这和fs 中的cp 类似。
Options 选项及含义如表所示:
注:不同版本的HDFS 可以通过http 协议拷贝,那么命令
Hadoop distcp hdfs:// dn1:port1/data/file1\ hdfs:// dn2:port2/data/file2可以写成:
hadoop distcp hftp:// dn1:port1/data/file1\ hftp:// dn2:port2/data/file2
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 的信息。
相关文章推荐
- HDFS 文件操作命令格式与注意事项
- HDFS 启动与关闭
- HDFS 可靠性的设计实现
- HDFS 文件操作基础命令
- HBase与HDFS结合使用
- DEPRECATED: Use of this script to execute hdfs command is deprecated. Instead use the hdfs command
- HDFS详解
- HDFS快照管理
- 清理Kylin的中间存储数据(HDFS & HBase Tables)
- Hadoop2.7实战v1.0之Linux参数调优
- IMF传奇行动第85课:Spark Streaming第四课:基于HDFS的Spark Streaming案例实战和内幕源码解密
- HDFS写入和读取流程
- HDFS写入和读取流程
- 六:熟悉HDFS基本常用命令(一)
- 七:熟悉HDFS基本常用命令(二)
- HDFS存储容量扩充
- HDFS多用户管理ACL机制other权限访问控制的理解
- HDFS源码分析之FSImage文件内容(一)总体格式
- 设计和实现一个简单的hdfs的备份恢复与容灾系统(1)
- hadoop入门--虚拟机伪分布式搭建