购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.2 HDFS命令行操作

HDFS的命令行接口类似传统的Shell命令,可以通过命令行接口与HDFS系统进行交互,从而对系统中的文件进行读取、移动、创建等操作。

命令行接口的格式如下:

     $ bin/hadoop fs -命令 文件路径

或者

     $ bin/hdfs dfs -命令 文件路径

上述格式中的hadoop fs和hdfs dfs为命令前缀,二者使用任何一个都可。

执行hadoop fs或hdfs dfs命令可以列出所有HDFS支持的命令列表,如下:

     $ hadoop fs
     Usage: hadoop fs [generic options]
         [-appendToFile <localsrc> ... <dst>]
         [-cat [-ignoreCrc] <src> ...]
         [-checksum <src> ...]
         [-chgrp [-R] GROUP PATH...]
         [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
         [-chown [-R] [OWNER][:[GROUP]] PATH...]
         [-copyFromLocal [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
         [-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
         [-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] <path> ...]
         [-cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>]
         [-createSnapshot <snapshotDir> [<snapshotName>]]
         [-deleteSnapshot <snapshotDir> <snapshotName>]
         [-df [-h] [<path> ...]]
         [-du [-s] [-h] [-x] <path> ...]
         [-expunge]
         [-find <path> ... <expression> ...]
         [-get [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
         [-getfacl [-R] <path>]
         [-getfattr [-R] {-n name | -d} [-e en] <path>]
         [-getmerge [-nl] [-skip-empty-file] <src> <localdst>]
         [-help [cmd ...]]
         [-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [<path> ...]]
         [-mkdir [-p] <path> ...]
         [-moveFromLocal <localsrc> ... <dst>]
         [-moveToLocal <src> <localdst>]
         [-mv <src> ... <dst>]
         [-put [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
         [-renameSnapshot <snapshotDir> <oldName> <newName>]
         [-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ...]
         [-rmdir [--ignore-fail-on-non-empty] <dir> ...]
         [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
         [-setfattr {-n name [-v value] | -x name} <path>]
         [-setrep [-R] [-w] <rep> <path> ...]
         [-stat [format] <path> ...]
         [-tail [-f] <file>]
         [-test -[defsz] <path>]
         [-text [-ignoreCrc] <src> ...]
         [-touchz <path> ...]
         [-truncate [-w] <length> <path> ...]
         [-usage [cmd ...]]

执行以下命令可以列出所有HDFS支持的命令及解析:

     $ bin/hdfs dfs -help

也可以使用以下格式查看具体某一个命令的详细解析:

     $ bin/hdfs dfs -help 命令名称

下面介绍一些HDFS系统的常用操作命令,若没有配置Hadoop的系统PATH变量,则需要进入到$HADOOP_HOME/bin目录中执行。

1.ls

使用ls命令可以查看HDFS系统中的目录和文件。例如,查看HDFS文件系统根目录下的目录和文件,命令如下:

     $ hadoop fs –ls /

递归列出HDFS文件系统根目录下的所有目录和文件,命令如下:

     $ hadoop fs –ls -R /

上述命令中的hadoop fs为操作HDFS系统的命令前缀,不可省略,但可以使用hdfs dfs代替。

2.put

使用put命令可以将本地文件上传到HDFS系统中。例如,将本地当前目录文件a.txt上传到HDFS文件系统根目录的input文件夹中,命令如下:

     $ hadoop fs –put a.txt /input/

3.moveFromLocal

使用moveFromLocal命令可以将本地文件移动到HDFS文件系统中,可以一次移动多个文件。/与put命令类似,不同的是,该命令执行后源文件将被删除。例如,将本地文件a.txt移动到HDFS根目录的input文件夹中,命令如下:

     $ hadoop fs -moveFromLocal a.txt /input/

4.get

使用get命令可以将HDFS文件系统中的文件下载到本地,注意下载时的文件名不能与本地文件相同,否则会提示文件已经存在。下载多个文件或目录到本地时,要将本地路径设置为文件夹。例如,将HDFS根目录的input文件夹中的文件a.txt下载到本地当前目录,命令如下:

     $ hadoop fs -get /input/a.txt a.txt

将HDFS根目录的input文件夹下载到本地当前目录,命令如下:

     $ hadoop fs -get /input/ ./

需要注意的是,需要确保用户对当前目录有可写权限。

5.rm

使用rm命令可以删除HDFS系统中的文件或文件夹,每次可以删除多个文件或目录。例如,删除HDFS根目录的input文件夹中的文件a.txt,命令如下:

     $ hadoop fs –rm /input/a.txt

递归删除HDFS根目录的output文件夹及该文件夹下的所有内容,命令如下:

     $ hadoop fs -rm -r /output

6.mkdir

使用mkdir命令可以在HDFS系统中创建文件或目录。例如,在HDFS根目录下创建文件夹input,命令如下:

     $ hadoop fs –mkdir /input/

也可使用-p参数创建多级目录,如果父目录不存在,则会自动创建父目录,命令如下:

     $ hadoop fs –mkdir –p /input/file

7.cp

使用cp命令可以复制HDFS中的文件到另一个文件,相当于给文件重命名并保存,但源文件仍然存在。例如,将/input/a.txt复制到/input/b.txt,并保留a.txt,命令如下:

     $ hadoop fs –cp /input/a.txt /input/b.txt

8.mv

使用mv命令可以移动HDFS文件到另一个文件,相当于给文件重命名并保存,源文件已不存在。例如,将/input/a.txt移动到/input/b.txt,命令如下:

     $ hadoop fs –mv /input/a.txt /input/b.txt

9.appendToFile

使用appendToFile命令可以将单个或多个文件的内容从本地系统追加到HDFS系统的文件中。例如,将本地当前目录的文件a.txt的内容追加到HDFS系统的/input/b.txt文件中,命令如下:

     $ hadoop fs -appendToFile a.txt /input/b.txt

若需要一次追加多个本地系统文件的内容,则多个文件用空格隔开。例如,将本地文件a.txt和b.txt的内容追加到HDFS系统的/input/c.txt文件中,命令如下:

     $ hadoop fs -appendToFile a.txt b.txt /input/c.txt

10.cat

使用cat命令可以查看并输出HDFS系统中某个文件的所有内容。例如,查看HDFS系统中的文件/input/a.txt的所有内容,命令如下:

     $ hadoop fs -cat /input/a.txt

也可以同时查看并输出HDFS中的多个文件的所有内容,结果会将多个文件的内容按照顺序合并输出。例如,查看HDFS中的文件/input/a.txt和文件/input/b.txt的所有内容,命令如下:

     $ hadoop fs -cat /input/a.txt /input/b.txt
注意

在使用HDFS命令操作文件时,HDFS中的文件或目录的路径必须写绝对路径,而本地系统的文件或目录可以写相对路径。 XCcC1RDeu4WUw3VRJtWn1rYzOG1nu6ROdmx2OWKZ+v00Mk1hF/R66ssYvML0jcOn

点击中间区域
呼出菜单
上一章
目录
下一章
×