![Hadoop+Spark大数据技术(微课版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/911/53255911/b_53255911.jpg)
2.3.2 HDFS常用的Shell操作
HDFS支持的操作命令有很多,下面给出常用的一部分操作命令。
1.创建目录——mkdir命令
mkdir命令用于在指定路径下创建目录(文件夹),其语法格式如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_38_04.jpg?sign=1739579256-lEp7ECmxAMwwZ18Pp6k4FU3NjBt7JnRt-0-ab51692837ee1741650960863e7e8561)
其中,-p参数表示创建目录时先检查路径是否存在,如果不存在,则创建相应的各级目录。
注意:Hadoop系统安装好以后,第一次使用HDFS时,需要先在HDFS中创建用户目录。
本书全部采用hadoop用户登录Linux系统,因此,需要在HDFS中为hadoop用户创建一个用户目录,命令如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_39_01.jpg?sign=1739579256-OunX0zEWKPjkeD1xr8E1UbCexlpTD4iu-0-8d4f8199b48eedfaf9a27cb01ebbb4fb)
该命令表示在HDFS中创建一个/user/hadoop目录,/user/hadoop目录就成为hadoop用户对应的用户目录。
下面可以使用如下命令创建一个input目录:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_39_02.jpg?sign=1739579256-b7s5spqvTNzQY4O9vmgL9MuHKlXkbILT-0-78d822cd44d9970d1e89e07c3e9354a8)
在创建input目录时,采用了相对路径形式,实际上,这个input目录在HDFS中的完整路径是/user/hadoop/input。如果要在HDFS的根目录下创建一个名称为input的目录,则需要使用如下命令:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_39_03.jpg?sign=1739579256-X0cLJuiY2wHeAHscJ9F2fgwlvAF67fde-0-2f3fb2ee9404c25ffebe1294c32a00f0)
2.列出指定目录下的内容——ls命令
ls命令用于列出指定目录下的内容,其语法格式如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_39_04.jpg?sign=1739579256-AVgKsnNmJLkHwe3A5zJBTPJ8WlTUi2cZ-0-8cf674fb775a593ddc3ac4c0d96342e8)
各项参数说明如下。
●-d:将目录显示为普通文件。
●-h:使用便于操作人员读取的单位信息格式。
●-R:递归显示所有子目录的信息。
示例代码如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_39_05.jpg?sign=1739579256-PSvOfgkEMWooNoQBTBFpLbEfLt0XuN4t-0-2db50b70bd157822fc80e11b7f187151)
上述示例代码执行完成后会展示HDFS中/user/hadoop目录下的所有文件及文件夹,如图2-2所示。
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_39_06.jpg?sign=1739579256-I0YxO4uUY0IYOhMFypjHOASRDoZTHcG5-0-ad79cfd63a0ff778e65e1c462f24ca73)
图2-2 ls命令的效果
3.上传文件——put命令
put命令用于从本地文件系统向HDFS中上传文件,其语法格式如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_39_07.jpg?sign=1739579256-MYLH2ouv90dq2X8O05ZrZ8kkeWPoqee0-0-333d9b298c2d87f0be238c5853238a86)
功能:将单个localsrc或多个localsrc从本地文件系统上传到HDFS中。
各项参数说明如下。
●-p:保留访问和修改时间、所有权和权限。
●-f:覆盖目标文件(如果已经存在)。
首先使用Vim编辑器,在Linux本地文件系统的/home/hadoop目录下创建一个文件myLocalFile.txt。
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_01.jpg?sign=1739579256-5kjKItlSHXFt8kLKCHDW0WU63Jy7XYxQ-0-e407246b96fdcb6f4f8cee9e7e9b5e9c)
在该文件中可以随便输入一些字符,例如,输入如下3行:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_02.jpg?sign=1739579256-BJXHa5y6cUDwpuOcFasNgEyABCtpyLlz-0-aa3e6c7e56cf5194b58de89487e0eab1)
可以使用如下命令把本地文件系统中的文件/home/hadoop/myLocalFile.txt上传到HDFS的/user/hadoop/input目录下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_03.jpg?sign=1739579256-63FX4mq5BmJTdrmtTQsoXzPx2mVJWaoe-0-0250a2431c808775ee01a7315f2d55e4)
可以使用ls命令查看一下文件是否成功上传到HDFS中,具体如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_04.jpg?sign=1739579256-OnGYL4tGPfPHHljjbWoGyhXTuiEzxJtM-0-89f6e29b458181570cf0e40e4e03577d)
该命令执行后,如果显示如下的信息则表明上传成功:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_05.jpg?sign=1739579256-9SR2i6G7sz8fCDKW8gtLjP2kBccg0eUI-0-3f79fa5290f9d5ad46402186207dfbb6)
4.从HDFS中下载文件到本地文件系统——get命令
get命令用于把HDFS中的文件下载到本地文件系统中,下面把HDFS中的myLocalFile.txt文件下载到本地文件系统中“/home/hadoop/下载”目录下,命令如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_06.jpg?sign=1739579256-PCL20PjBIsxmgp4cFkOwwawsNWd4Rs7C-0-4e109c88f34dfb0781ad1922e43aa2d3)
5.在HDFS中复制文件——cp命令
cp命令用于把HDFS中一个目录下的一个文件复制到HDFS中另一个目录下,其语法格式如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_07.jpg?sign=1739579256-fLdMw2vnYPfRx7U0Ux6jyPMYzGOD6uAz-0-25a5a2e285e1b44780f64db7f2bcafc3)
把HDFS的/user/hadoop/input/myLocalFile.txt文件复制到HDFS中另外一个目录/input(input目录位于HDFS根目录下)中的命令如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_08.jpg?sign=1739579256-upldNo5ZuRleNmLXPGy0VuO1UJZeFmPY-0-584d0be0274321073808f23e1c9ea652)
下面使用如下命令查看HDFS中/input目录下的内容:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_09.jpg?sign=1739579256-XAORAzpRmGqy5YiSUFn2ixN0coWhvuhI-0-006d9035a8eeb7fd2a688812e4a351db)
该命令执行后,如果显示如下的信息,表明复制成功:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_10.jpg?sign=1739579256-gEs47tnN6tj8KEK9fDvoYxa5gqK93ugc-0-151e3185f6046eb4fd9840d1cf0e1064)
这个命令将文件从源路径复制到目标路径,允许有多个源路径,此时目标路径必须是一个目录。
6.查看文件内容——cat命令
cat命令用于查看文件内容,其语法格式如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_11.jpg?sign=1739579256-IoKzb5YzU9fqvfU378L5W3rx275UaRDM-0-7655de2d104a50b1cdf219cb8424c39c)
下面使用cat命令查看HDFS中myLocalFile.txt文件的内容:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_41_01.jpg?sign=1739579256-RKt6uZ3EJwq9vGVhsfFrR6lJf3XGQ9Mv-0-45eca322b405586f4327223843dda02d)
7.在HDFS目录中移动文件——mv命令
mv命令用于将文件从源路径移动到目标路径,该命令允许有多个源路径,此时目标路径必须是一个目录,其语法格式如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_41_02.jpg?sign=1739579256-nElUALUP51yNQSs4hED6fWmnh9ClYPH7-0-bf1a1ad64b0b3d1d51b9d208c646e17c)
下面使用mv命令将HDFS中input目录下的myLocalFile.txt文件移动到HDFS中output目录下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_41_03.jpg?sign=1739579256-ewq38VswQBNhVP4xTMwui493l7ddYib5-0-c531bf66455c55edaefba38009271c3d)
8.显示文件大小——du命令
du命令用来显示目录中所有文件的大小,当只指定一个文件时,显示该文件的大小,示例如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_41_04.jpg?sign=1739579256-aZdT8MqVmTxbUdIbsimgBFnLCosfsBv3-0-5d42edde3e5ebf8a739591acc58f25f4)
9.追加文件内容——appendToFile命令
appendToFile命令用于追加一个文件到已经存在的文件末尾,其语法格式如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_41_05.jpg?sign=1739579256-2jSkGTNKOTC3h9axrpzN3ymTXFRPRFOD-0-7460089d616a124714c4d5725c4c167f)
/home/hadoop目录下word.txt文件的内容是“hello hadoop”,下面的命令将该内容追加到HDFS中myLocalFile.txt文件的末尾:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_41_06.jpg?sign=1739579256-NmxcWc0Gqoc7EEMbpF1aGxnveU4bqhhK-0-801cc5d1d63a67ca852466dab0366e3f)
注意:HDFS不能对文件进行修改,但可以进行追加。
10.从本地文件系统中复制文件到HDFS——copyFromLocal命令
copyFromLocal命令用于从本地文件系统中复制文件到HDFS,其语法格式如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_42_01.jpg?sign=1739579256-IvwZIFMIA7frU81zHSdnHExJxbU6lpcu-0-275b5e409debc3f6673ed985e657dd54)
下面的命令将本地文件/home/hadoop/word.txt复制到HDFS中的input目录下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_42_02.jpg?sign=1739579256-9KpHajjVJXJJDzmplbL3cMwXmg7bLAQi-0-d2b625ede17df2f933eef8bf33f6c055)
11.从HDFS中复制文件到本地文件系统——copyToLocal命令
copyToLocal命令用于将HDFS中的文件复制到本地文件系统,下面的命令将HDFS中的myLocalFile.txt文件复制到本地/home/hadoop目录下,并重命名为LocalFile100.txt:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_42_03.jpg?sign=1739579256-aWHFlwo5LPUvzD94SBX264p1PkiXGi5q-0-773474b8fc1c3fb4e005e38efed9172f)
12.从HDFS中删除文件和目录——rm命令
rm命令用于删除HDFS中的文件和目录。
使用rm命令删除文件的示例如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_42_04.jpg?sign=1739579256-vVpWrSHNkAbROMuEBxFifvAv2RjZBej1-0-a99976c0454a9c442c95304da4dc684b)
使用rm命令删除目录的示例如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_42_05.jpg?sign=1739579256-b1CEy8QMxt3K3dZKYbHelw4ZSCPzzSwN-0-712eecb05c398d377abdff8df2949a60)
上面的命令中,-r参数表示删除input目录及其子目录下的所有内容。