大数据生态系统基础:Hadoop(四):Hadoop 3.0.0 HDFS SHELL 命令

时间:2023-01-14 08:26:34

一、介绍

       可以通过许多不同的方式从应用程序访问HDFS。在本地,HDFS为应用程序提供了一个文件系统Java API。这个Java API和REST API的C语言包装也是可用的。此外,还可以使用HTTP浏览器来浏览HDFS实例的文件。通过使用NFS网关,可以将HDFS作为客户机本地文件系统的一部分进行安装。

       使用 hadoop fs 命令可以直接操作 hdfs里面的文件,这些操作很类似 linux 的操作。

 

二、FS SHELL

      HDFS允许用户数据以文件和目录的形式进行组织。它提供了一个名为FS shell的commandline接口,它允许用户与HDFS中的数据进行交互。这个命令集的语法类似于其他用户已经熟悉的shell(如bash、csh)。以下是一些示例操作/命令对:

      

说明 命令
 创建目录名 /foodir bin/hadoop dfs -mkdir /foodir
删除目录名 /foodir bin/hadoop fs -rm -R /foodir
查看/foodir/myfile.txt文件内容 bin/hadoop dfs -cat /foodir/myfile.txt


        FS shell 的内容比较多,可以参考:http://hadoop.apache.org/docs/r3.0.0-alpha4/hadoop-project-dist/hadoop-common/FileSystemShell.html

      

二、DFSAdmin

 他的DFSAdmin命令集用于管理HDFS集群。这些命令只能由HDFS管理员使用。以下是一些示例操作/命令对:

说民 命令
设置集群为安全模式 bin/hdfs dfsadmin -safemode enter
查看DataNodes的说明报告  bin/hdfs dfsadmin -report
重新校验或解除DataNode(s)  bin/hdfs dfsadmin -refreshNodes

三、浏览接口

 典型的HDFS安装配置一个web服务器,通过一个可配置的TCP端口来公开HDFS命名空间。这允许用户浏览HDFS名称空间,并使用web浏览器查看其文件的内容。


四、空间回收

 1、文件删除和恢复

           如果启用了垃圾配置,那么通过FS Shell删除的文件不会立即从HDFS中删除。相反,HDFS将它移动到一个垃圾目录(每个用户都有自己的垃圾目录下/用户/用户名/.Trash)。只要文件还在垃圾中,文件就可以迅速恢复。


           最近删除的文件被移动到当前的垃圾目录(/用户/用户名/.trash/current),并且在一个可配置的时间间隔内,HDFS在当前的垃圾目录中创建检查点(在/用户/用户名/.Trash/<date>),并在过期时删除旧的检查点。请参阅FS shell关于清除垃圾的命令。


       在垃圾结束后,NameNode从HDFS名称空间中删除了文件。文件的删除会导致与该文件相关的块被释放。注意,在一个用户删除文件和在HDFS中相应增加空闲空间的时间之间,可能会有一个明显的时间延迟。


        下面是一个示例,它将展示如何通过FS Shell将文件从HDFS中删除。我们在删除目录下创建了两个文件(test1和test2)

$ hadoop fs -mkdir -p delete/test1
$ hadoop fs -mkdir -p delete/test2
$ hadoop fs -ls delete/
Found 2 items
drwxr-xr-x - hadoop hadoop 0 2015-05-08 12:39 delete/test1
drwxr-xr-x - hadoop hadoop 0 2015-05-08 12:40 delete/test2
我们将删除文件test1。下面的注释显示该文件已被移动到垃圾目录。

$ hadoop fs -rm -r delete/test1
Moved: hdfs://localhost:9820/user/hadoop/delete/test1 to trash at: hdfs://localhost:9820/user/hadoop/.Trash/Current

现在,我们将使用skip垃圾箱选项删除该文件,该选项不会将文件发送到垃圾。它将完全从HDFS中删除。

$ hadoop fs -rm -r -skipTrash delete/test2
Deleted delete/test2

我们现在可以看到,垃圾目录只包含文件test1。

$ hadoop fs -ls .Trash/Current/user/hadoop/delete/
Found 1 items\
drwxr-xr-x - hadoop hadoop 0 2015-05-08 12:39 .Trash/Current/user/hadoop/delete/test1

因此,文件test1将被删除,文件test2被永久删除。

 

2、降低复制因子

    当文件的复制因子减少时,NameNode会选择可以删除的多余副本。下一个心跳将这些信息传输到DataNode。然后DataNode删除相应的块,并在集群中显示相应的空闲空间。再一次,在setrepapi调用的完成和集群中的空闲空间的出现之间可能会有一段时间延迟。