![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=1739589727-wt4mmnuqltnW04f91KHRU04sSXRTmgds-0-ed34de76b6fdfdb13c8f2cc03cd5f6e3)
其中,-p参数表示创建目录时先检查路径是否存在,如果不存在,则创建相应的各级目录。
注意:Hadoop系统安装好以后,第一次使用HDFS时,需要先在HDFS中创建用户目录。
本书全部采用hadoop用户登录Linux系统,因此,需要在HDFS中为hadoop用户创建一个用户目录,命令如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_39_01.jpg?sign=1739589727-nXMamPqFB603sXR8o3d1oPTmIIwrHH8I-0-0a0f5607f93332c1cde1d4ead7046e4f)
该命令表示在HDFS中创建一个/user/hadoop目录,/user/hadoop目录就成为hadoop用户对应的用户目录。
下面可以使用如下命令创建一个input目录:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_39_02.jpg?sign=1739589727-Ck9CTqwJbZDCW8Ff9l99TA1xJfmwdhvr-0-da8ebadbb82522fde75b189b2e46db7d)
在创建input目录时,采用了相对路径形式,实际上,这个input目录在HDFS中的完整路径是/user/hadoop/input。如果要在HDFS的根目录下创建一个名称为input的目录,则需要使用如下命令:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_39_03.jpg?sign=1739589727-EsoYjwyHcjQnT7184WTFhz2Pouk3WNPK-0-dfeeec85b4af1bafa5d864d7c4859b26)
2.列出指定目录下的内容——ls命令
ls命令用于列出指定目录下的内容,其语法格式如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_39_04.jpg?sign=1739589727-9rXDDNYpo73uOG4Ew5SmqLNj40Anrn9J-0-f1b508b51b63c93f31f6fbd6cfbe2758)
各项参数说明如下。
●-d:将目录显示为普通文件。
●-h:使用便于操作人员读取的单位信息格式。
●-R:递归显示所有子目录的信息。
示例代码如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_39_05.jpg?sign=1739589727-kE5urgiXDJQYrVrhr5IJkODbyMdpSkMp-0-77c41cbba1bb27445529dceee822f331)
上述示例代码执行完成后会展示HDFS中/user/hadoop目录下的所有文件及文件夹,如图2-2所示。
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_39_06.jpg?sign=1739589727-XiU7WMGlxPIIqJQvZJzw45jckfiZyvYf-0-821c78bf0c0844d73e4bb90e35b1215f)
图2-2 ls命令的效果
3.上传文件——put命令
put命令用于从本地文件系统向HDFS中上传文件,其语法格式如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_39_07.jpg?sign=1739589727-qcYhZB6RtyA3X8A4rdvBfzy89KBfxCff-0-4c8d1b43533d7898b0af835e1bfaa0a6)
功能:将单个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=1739589727-LwCHVYU7XBaam68y5JmCIDqvNp4EXPTS-0-c578a49f5a54ecbac933b04a7f2cb4a2)
在该文件中可以随便输入一些字符,例如,输入如下3行:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_02.jpg?sign=1739589727-WsMhs6X5tHEIg3mvqpJfPbvPjt4YaJEl-0-509e3385820bbfbe69f6c887aad2496e)
可以使用如下命令把本地文件系统中的文件/home/hadoop/myLocalFile.txt上传到HDFS的/user/hadoop/input目录下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_03.jpg?sign=1739589727-5boxldYpaRBYKWSCVvQTZOoDQCVi4rbt-0-11d501e9d53cb4ee38caee12c3cc5c46)
可以使用ls命令查看一下文件是否成功上传到HDFS中,具体如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_04.jpg?sign=1739589727-WIxC987mMkOMFYjb3HfM6cLPHt2SxEwc-0-b37a6a3a2fb3d800af8754b4e83be526)
该命令执行后,如果显示如下的信息则表明上传成功:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_05.jpg?sign=1739589727-7Ylov1mCZlHGwUKh4OtGXo69D0YYNh6F-0-63e4dada8db6472d1311c00a5887dd21)
4.从HDFS中下载文件到本地文件系统——get命令
get命令用于把HDFS中的文件下载到本地文件系统中,下面把HDFS中的myLocalFile.txt文件下载到本地文件系统中“/home/hadoop/下载”目录下,命令如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_06.jpg?sign=1739589727-WQT03DDHiCEBznwCs5kk3Km6XQUp2axq-0-c38c71dd3166453bf2eecd0f83b6928f)
5.在HDFS中复制文件——cp命令
cp命令用于把HDFS中一个目录下的一个文件复制到HDFS中另一个目录下,其语法格式如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_07.jpg?sign=1739589727-5LywQ6jFHy5eaEqkWMwrsaBL5JntQy9j-0-d6dbc1183d4c17de99836c9c63c2e598)
把HDFS的/user/hadoop/input/myLocalFile.txt文件复制到HDFS中另外一个目录/input(input目录位于HDFS根目录下)中的命令如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_08.jpg?sign=1739589727-MapRS06SkUyjV7Vri6AVSEiTityI8OZB-0-c8c983fadb1ae4f274a16ae8fcae8415)
下面使用如下命令查看HDFS中/input目录下的内容:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_09.jpg?sign=1739589727-FOpi5m79RKbVj5KlsSzD4ykRja2bwap1-0-49b15de7a0c3f8d295a919ddb4879cad)
该命令执行后,如果显示如下的信息,表明复制成功:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_10.jpg?sign=1739589727-GWHJGcHpXRkiF5poY1WSB4GGAjoXmFMu-0-06ce59d654e01beb69fa032de3df790b)
这个命令将文件从源路径复制到目标路径,允许有多个源路径,此时目标路径必须是一个目录。
6.查看文件内容——cat命令
cat命令用于查看文件内容,其语法格式如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_40_11.jpg?sign=1739589727-Yl6qs8VABQ6f0VZcw4KYf1BgGSHzWVyK-0-8344f841d4996a339252271880464058)
下面使用cat命令查看HDFS中myLocalFile.txt文件的内容:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_41_01.jpg?sign=1739589727-QxZQO0r3j0jDX0gIz0f0gOCDZ5YBiBz9-0-4f04df1f86f748d5a08c28e9c6b440be)
7.在HDFS目录中移动文件——mv命令
mv命令用于将文件从源路径移动到目标路径,该命令允许有多个源路径,此时目标路径必须是一个目录,其语法格式如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_41_02.jpg?sign=1739589727-ZFQRM17eReNa79vsYTRZM09FJPTJk8YB-0-e668aca1f4337963bec63bcd2f8e00d9)
下面使用mv命令将HDFS中input目录下的myLocalFile.txt文件移动到HDFS中output目录下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_41_03.jpg?sign=1739589727-0M9TnPCJNWg2UcGNCqxvouy4iEQ6fkif-0-01ad8ae57ac608292bd78a1bcdb42755)
8.显示文件大小——du命令
du命令用来显示目录中所有文件的大小,当只指定一个文件时,显示该文件的大小,示例如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_41_04.jpg?sign=1739589727-UYWpdwLNDjxPkjDQWLbUMjbJmNox1zWW-0-4e84de38c2fe94de03c3f4b99ed8675c)
9.追加文件内容——appendToFile命令
appendToFile命令用于追加一个文件到已经存在的文件末尾,其语法格式如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_41_05.jpg?sign=1739589727-NPAWJ0dxANlf4NWQIlgeuUxJkAhNb7Co-0-4eda98938815363219cec8103ffcb864)
/home/hadoop目录下word.txt文件的内容是“hello hadoop”,下面的命令将该内容追加到HDFS中myLocalFile.txt文件的末尾:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_41_06.jpg?sign=1739589727-5GV9HxUQs4oNvMizyHUml7wxc9ZszgDc-0-553656764a3404135ce20db2472c6059)
注意:HDFS不能对文件进行修改,但可以进行追加。
10.从本地文件系统中复制文件到HDFS——copyFromLocal命令
copyFromLocal命令用于从本地文件系统中复制文件到HDFS,其语法格式如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_42_01.jpg?sign=1739589727-dnTwM9d13w3STBrSGao0GU35h8d1Jctt-0-6d05d4bd4544cb03265b7a6ce1dd34e4)
下面的命令将本地文件/home/hadoop/word.txt复制到HDFS中的input目录下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_42_02.jpg?sign=1739589727-ZNwzjcdxNFAZDkEYRAvrCuSFYJ0rbrRf-0-50606ca45b14efe2c9b5b29847af5b88)
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=1739589727-MUepKFQv56SW6v0JvjcZwNBeDTQwXGdF-0-5a4f48140910f1dc362d1c84357bcd45)
12.从HDFS中删除文件和目录——rm命令
rm命令用于删除HDFS中的文件和目录。
使用rm命令删除文件的示例如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_42_04.jpg?sign=1739589727-z9BuzGhq3EUIjO0uIdU4DJyhJ9VPhAts-0-13c308ed1643f2ce74be7056db084ece)
使用rm命令删除目录的示例如下:
![](https://epubservercos.yuewen.com/34C2C0/31729190603279406/epubprivate/OEBPS/Images/58327_42_05.jpg?sign=1739589727-oukUuNljSxuJvhUMMOLTqhQBLPClKZsh-0-f09903fe08dd9a67f8f96c40eae5ea38)
上面的命令中,-r参数表示删除input目录及其子目录下的所有内容。