![Hadoop大数据技术开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/392/27563392/b_27563392.jpg)
4.2 HDFS命令行操作
HDFS的命令行接口类似传统的Shell命令,可以通过命令行接口与HDFS系统进行交互,从而对系统中的文件进行读取、移动、创建等操作。
命令行接口的格式如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P67_7251.jpg?sign=1739383881-FtpFh2X3Z07oby9QVAOWtQNIEI4erayT-0-2af5e16159623f37fda6e28c98337913)
或者
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P67_7259.jpg?sign=1739383881-nNVc2i3VfvW4SJFHh4zltWTGtPWIsyor-0-d66d139ed3110c70e1d09a0ee57be4f8)
上述格式中的hadoop fs和hdfs dfs为命令前缀,二者使用任何一个都可。
执行hadoop fs或hdfs dfs命令可以列出所有HDFS支持的命令列表,如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P67_7432.jpg?sign=1739383881-B1UDPBv9iVP70QRgldXu9ZJXbduYuE6d-0-dc48e776e3fe88c1eb77eace2cbcd433)
执行以下命令可以列出所有HDFS支持的命令及解析:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P68_7530.jpg?sign=1739383881-XEsot0s8V8pPnEYwQmRhtDsfOCmCWBeZ-0-37440b1d0d268019eb910b5bca4213a9)
也可以使用以下格式查看具体某一个命令的详细解析:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P68_7537.jpg?sign=1739383881-u5UU7NYuTroR8JSXbBfnDILbIJpGDocD-0-951832ddf912a67f773ceff9b5763c1d)
下面就介绍一些HDFS系统的常用操作命令,若没有配置Hadoop的系统PATH变量,则需要进入到$HADOOP_HOME/bin目录中执行。
1. ls
使用ls命令可以查看HDFS系统中的目录和文件。例如,查看HDFS文件系统根目录下的目录和文件,命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P68_7545.jpg?sign=1739383881-fOPAwUAfgcf83TqeZcZVNcDXHuznvDQL-0-6132efd6d8e2260b12c794976c6f1d70)
递归列出HDFS文件系统根目录下的所有目录和文件,命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P68_7552.jpg?sign=1739383881-HTm5AcCwagoVvi31eqDVASsfMFwpwEZN-0-42a8b2ce95c985c247349338019b807e)
上述命令中的hadoop fs为操作HDFS系统的命令前缀,不可省略。该前缀也可以使用hdfs dfs代替。
2. put
使用put命令可以将本地文件上传到HDFS系统中。例如,将本地当前目录文件a.txt上传到HDFS文件系统根目录的input文件夹中,命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P68_7580.jpg?sign=1739383881-YyBqzJwWjVIRtzjjBDyFlNUKod3G1MfG-0-40f82b3f3bc2d59fc7ea382045e078bd)
3. moveFromLocal
使用moveFromLocal命令可以将本地文件移动到HDFS文件系统中,可以一次移动多个文件。/与put命令类似,不同的是,该命令执行后源文件将被删除。例如,将本地文件a.txt移动到HDFS根目录的input文件夹中,命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P68_7581.jpg?sign=1739383881-FPWSRIfXyQv4CWk7c95mWaU6iqifuI21-0-e12b9b7ec98a2ffbf36ec2e6210956bb)
4. get
使用get命令可以将HDFS文件系统中的文件下载到本地,注意下载时的文件名不能与本地文件相同,否则会提示文件已经存在。下载多个文件或目录到本地时,要将本地路径设置为文件夹。例如,将HDFS根目录的input文件夹中的文件a.txt下载到本地当前目录,命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P69_7591.jpg?sign=1739383881-1Db1oHzPQnK4Bho1Igu4VMEhSC9sjMvA-0-3159267c2f334c92bb9e0f0a6b55f150)
将HDFS根目录的input文件夹下载到本地当前目录,命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P69_7598.jpg?sign=1739383881-Ng5U5v4BwEntvcm7X1GJ2cIohwfA8Aq1-0-a6473f1e6ea8ca58f02624b1b969e13d)
需要注意的是,需要确保用户对当前目录有可写权限。
5. rm
使用rm命令可以删除HDFS系统中的文件或文件夹,每次可以删除多个文件或目录。例如,删除HDFS根目录的input文件夹中的文件a.txt,命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P69_7605.jpg?sign=1739383881-rWx4Fg6nEePR2T3GVT9ro5g0wTm5gHaM-0-d2f7b63d9235151c382b12b089f241b4)
递归删除HDFS根目录的output文件夹及该文件夹下的所有内容,命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P69_7612.jpg?sign=1739383881-YJNjSVrDuEByI1MtytAmmcCbcSRoFR0r-0-1c594c3e1e0626d5f08d2e67a3c6f4f2)
6. mkdir
使用mkdir命令可以在HDFS系统中创建文件或目录。例如,在HDFS根目录下创建文件夹input,命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P69_7619.jpg?sign=1739383881-oJfFp8I7hY3k1ISooiL6Aryb7ZZn5EXC-0-58da7539432dd393f2e34de1921b00fe)
也可使用-p参数创建多级目录,如果父目录不存在,则会自动创建父目录。命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P69_7626.jpg?sign=1739383881-7jSaaTx8soa2xgVQVnADHnYuaCz2BtxE-0-855bcaf45ecd6a58619b2ce214f931c9)
7. cp
使用cp命令可以复制HDFS中的文件到另一个文件,相当于给文件重命名并保存,但源文件仍然存在。例如,将/input/a.txt复制到/input/b.txt,并保留a.txt,命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P69_7633.jpg?sign=1739383881-xsjl97tcPoZmAaP1ZK0Lot6o1YIIX7YS-0-e0820d8cedcc276a8314f231594c5392)
8. mv
使用mv命令可以移动HDFS文件到另一个文件,相当于给文件重命名并保存,源文件已不存在。例如,将/input/a.txt移动到/input/b.txt,命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P69_7640.jpg?sign=1739383881-JayrvFYDIDiUrw7Yo2upjUWx2rr5tq53-0-22da55c1c97f9d3fe01cb131f62d4ea2)
9. appendToFile
使用appendToFile命令可以将单个或多个文件的内容从本地系统追加到HDFS系统的文件中。例如,将本地当前目录的文件a.txt的内容追加到HDFS系统的/input/b.txt文件中,命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P69_7647.jpg?sign=1739383881-jfk9HBF43QcaUmPXa3TSFVOstTZvGacQ-0-558291cf809bcf89758736faa876f548)
若需要一次追加多个本地系统文件的内容,则多个文件用“空格”隔开。例如,将本地文件a.txt和b.txt的内容追加到HDFS系统的/input/c.txt文件中,命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P70_7677.jpg?sign=1739383881-PpBn4TkH8g3zPdjRSLtKBhvdAjLj7Kt4-0-463dd23017ef7749de7a36dddac4de69)
10. cat
使用cat命令可以查看并输出HDFS系统中某个文件的所有内容。例如,查看HDFS系统中的文件/input/a.txt的所有内容,命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P70_7684.jpg?sign=1739383881-ze9jhgOF4ElpvCYOBG4tKXh1qYwuBDLc-0-59499ae857b0481fc0ec8209f1c405cd)
也可以同时查看并输出HDFS中的多个文件内容,结果会将多个文件的内容按照顺序合并输出。例如,查看HDFS中的文件/input/a.txt和文件/input/b.txt的所有内容,命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P70_7691.jpg?sign=1739383881-YjOGQTez7nkqeBnQBUF40JbQfcgjPRPo-0-2b74be6e12c64433c74fc0844e243a12)
注意
在使用HDFS命令操作文件时,HDFS中的文件或目录的路径必须写绝对路径,而本地系统的文件或目录可以写相对路径。