
2.3.2 HDFS常用的Shell操作
HDFS支持的操作命令有很多,下面给出常用的一部分操作命令。
1.创建目录——mkdir命令
mkdir命令用于在指定路径下创建目录(文件夹),其语法格式如下:

其中,-p参数表示创建目录时先检查路径是否存在,如果不存在,则创建相应的各级目录。
注意:Hadoop系统安装好以后,第一次使用HDFS时,需要先在HDFS中创建用户目录。
本书全部采用hadoop用户登录Linux系统,因此,需要在HDFS中为hadoop用户创建一个用户目录,命令如下:

该命令表示在HDFS中创建一个/user/hadoop目录,/user/hadoop目录就成为hadoop用户对应的用户目录。
下面可以使用如下命令创建一个input目录:

在创建input目录时,采用了相对路径形式,实际上,这个input目录在HDFS中的完整路径是/user/hadoop/input。如果要在HDFS的根目录下创建一个名称为input的目录,则需要使用如下命令:

2.列出指定目录下的内容——ls命令
ls命令用于列出指定目录下的内容,其语法格式如下:

各项参数说明如下。
●-d:将目录显示为普通文件。
●-h:使用便于操作人员读取的单位信息格式。
●-R:递归显示所有子目录的信息。
示例代码如下:

上述示例代码执行完成后会展示HDFS中/user/hadoop目录下的所有文件及文件夹,如图2-2所示。

图2-2 ls命令的效果
3.上传文件——put命令
put命令用于从本地文件系统向HDFS中上传文件,其语法格式如下:

功能:将单个localsrc或多个localsrc从本地文件系统上传到HDFS中。
各项参数说明如下。
●-p:保留访问和修改时间、所有权和权限。
●-f:覆盖目标文件(如果已经存在)。
首先使用Vim编辑器,在Linux本地文件系统的/home/hadoop目录下创建一个文件myLocalFile.txt。

在该文件中可以随便输入一些字符,例如,输入如下3行:

可以使用如下命令把本地文件系统中的文件/home/hadoop/myLocalFile.txt上传到HDFS的/user/hadoop/input目录下:

可以使用ls命令查看一下文件是否成功上传到HDFS中,具体如下:

该命令执行后,如果显示如下的信息则表明上传成功:

4.从HDFS中下载文件到本地文件系统——get命令
get命令用于把HDFS中的文件下载到本地文件系统中,下面把HDFS中的myLocalFile.txt文件下载到本地文件系统中“/home/hadoop/下载”目录下,命令如下:

5.在HDFS中复制文件——cp命令
cp命令用于把HDFS中一个目录下的一个文件复制到HDFS中另一个目录下,其语法格式如下:

把HDFS的/user/hadoop/input/myLocalFile.txt文件复制到HDFS中另外一个目录/input(input目录位于HDFS根目录下)中的命令如下:

下面使用如下命令查看HDFS中/input目录下的内容:

该命令执行后,如果显示如下的信息,表明复制成功:

这个命令将文件从源路径复制到目标路径,允许有多个源路径,此时目标路径必须是一个目录。
6.查看文件内容——cat命令
cat命令用于查看文件内容,其语法格式如下:

下面使用cat命令查看HDFS中myLocalFile.txt文件的内容:

7.在HDFS目录中移动文件——mv命令
mv命令用于将文件从源路径移动到目标路径,该命令允许有多个源路径,此时目标路径必须是一个目录,其语法格式如下:

下面使用mv命令将HDFS中input目录下的myLocalFile.txt文件移动到HDFS中output目录下:

8.显示文件大小——du命令
du命令用来显示目录中所有文件的大小,当只指定一个文件时,显示该文件的大小,示例如下:

9.追加文件内容——appendToFile命令
appendToFile命令用于追加一个文件到已经存在的文件末尾,其语法格式如下:

/home/hadoop目录下word.txt文件的内容是“hello hadoop”,下面的命令将该内容追加到HDFS中myLocalFile.txt文件的末尾:

注意:HDFS不能对文件进行修改,但可以进行追加。
10.从本地文件系统中复制文件到HDFS——copyFromLocal命令
copyFromLocal命令用于从本地文件系统中复制文件到HDFS,其语法格式如下:

下面的命令将本地文件/home/hadoop/word.txt复制到HDFS中的input目录下:

11.从HDFS中复制文件到本地文件系统——copyToLocal命令
copyToLocal命令用于将HDFS中的文件复制到本地文件系统,下面的命令将HDFS中的myLocalFile.txt文件复制到本地/home/hadoop目录下,并重命名为LocalFile100.txt:

12.从HDFS中删除文件和目录——rm命令
rm命令用于删除HDFS中的文件和目录。
使用rm命令删除文件的示例如下:

使用rm命令删除目录的示例如下:

上面的命令中,-r参数表示删除input目录及其子目录下的所有内容。