在HDFS中所有的Hadoop命令均由bin/hadoop脚本引出,不指定参数运行Hadoop脚本会打印出所有命令的描述。这篇博文总结一下常用的HDFS命令的操作。
一、version命令
version命令可以打印Hadoop版本的详细信息。
$ hadoop version
二、dfsadmin命令
dfsadmin命令可以查看集群存储空间使用情况和各节点存储空间使用情况。
# hadoop dfsadmin -report
三、jar命令
jar命令是运行jar包文件命令。用户可以把他们的MapReduce代码捆绑到jar文件中,使用jar命令使程序运行起来。
hadoop jar <jar> [mainClass]
- <jar>:jar包
- [mainClass]:可选选项,指定运行主类
eg:使用"hadoop jar"命令在Hadoop集群中运行WordCount.jar程序,示例如下:
# hadoop jar WordCount.jar
四、fs命令
fs参数是运行通用文件系统参数,在Hadoop后面跟上fs参数,表示是对HDFS中的文件进行操作。
hadoop fs [GENERIC_OPTIONS] [COMMAND_OPTIONS]
- GENERIC_OPTIONS:通用选项
- COMMAND_OPTIONS:命令选项
fs常用的基本选项如下:
1. mkdir
mkdir命令可以在HDFS中创建新目录,但它只能创建一级目录。创建多级目录上一级目录必须先存在,或是使用-p参数。
hadoop fs -mkdir <paths>
eg1:使用mkdir命令在HDFS中分别在input目录下创建一个file2目录、在output目录下也创建一个file2目录
hadoop fs -mkdir /input/file2 /output/file2
eg2:使用mkdir命令在HDFS中创建一个多级目录/file/file1/file2/file3
hadoop fs -mkdir -p /file/file1/file2/file3
2. touchz
touchz命令可以在HDFS中创建一个0字节的空文件。
hadoop fs -touchz <hdfs:newFile>
3. du & dus & ls & lsr
du命令是显示文件或文件夹属性的命令,可以显示(多个)指定文件、(多个)指定目录中所有文件的大小。
dus命令可以显示指定(多个)文件目录的大小。
ls命令可以在HDFS中显示指定文件的详细内容。如果是目录,则返回它直接子文件的列表。详细内容包括:权限、用户、文件所在组、文件大小、创建日期和路径等信息。
lsr命令是ls -R简写,是用来递归显示HDFS中指定目录下的所有子文件的详细信息。
hadoop fs -du <hdfs:pathDirectory>
hadoop fs -dus <hdfs:pathDirectory>
hadoop fs -ls <hdfs:pathDirectory>
hadoop fs -lsr <hdfs:pathDirectory>
4. cat
cat命令可以在HDFS中查看指定文件或指定文件夹下所有文件内容。
hadoop fs -cat <hdfs:pathfile>
eg:查看HDFS中input目录下所有文件内容
hadoop fs -cat /input/*
注:/input/*中的*表示input目录下的所有文件,/input/part*中的*指的是input目录下所有以part开始的文件。
5. put & get & getmerge
put命令可以从本地文件系统中复制单个或多个源路径到目标文件系统。HDFS中接收文件的目录必须事先存在。
get命令从HDFS中复制指定文件、指定多个文件或指定目录下所有文件,到本地文件目录。在执行get之前,本地文件目录必须事先存在,get是一种常用的下载命令。
getmerge命令将HDFS中指定目录下的所有文件加载到本地中。如果文件名不存在将在本地新创建文件,如果文件名存在,则覆盖文件内所有内容。
hadoop fs -put <local:pathFile> [local:pathFile] <hdfs:pathDirectory>
hadoop fs -get <hdfs:pathFile> <local:pathDirectory>
hadoop fs -getmerge <hdfs:pathDirectory> <hdfs:pathFile>
eg1:从本地上传city_data文件和monitor_data文件到HDFS的test目录中
hadoop fs -put city_data monitor_data /test
eg2:在HDFS中复制input目录下的word_count文件到本地file目录中
hadoop fs -get /input/word_count ~/file
6. copyFromLocal & copyToLocal
二者和put/get命令很像,但是copyFromLocal是将本地文件上传到HDFS中(源地址必须是本地文件地址),copyToLocal是将HDFS中的文件下载到本地(源路径只能是一个本地文件,get的源路径可能是多个文件,也可能是标准输入)。
hadoop fs -copyFromLocal <local:pathFile> <hdfs:pathDirectory>
hadoop fs -copyToLocal <hdfs:pathFile> <local:pathDirectory>
7. cp
cp(copy)命令可以将HDFS中的指定文件复制到HDFS中目标路径。这个命令允许有多个源路径,此时目标路径必须是一个目录。
hadoop fs -cp <hdfs:pathFile> <hdfs:pathDirectory>
8. mv & rm & rmr
mv命令可以在HDFS中将文件从源路径移动到目标路径,这个命令允许有多个源路径,此时目标路径必须是一个目录。
rm命令用于删除一个指定的文件或多个指定的文件的命令,加上“-r”参数可以删除指定目录。
rmr命令等价于rm -r命令,可以删除目录或递归删除子文件,如果使用-rmr命令删除一个目录时,不管目录下是否有其他文件,均将一并删除。
hadoop fs -mv <hdfs:sourcepath> [hdfs:sourcepath...] <hdfs:targetpath>
hadoop fs -rm <hdfs:pathFile> [hdfs:pathFile]
hadoop fs -rmr <hdfs:pathDirectory> [hdfs:pathDirectory]
eg1:将HDFS中的/input/major文件移动到/file/file1/file2中
hadoop fs -mv /input/major /file/file1/file2
eg2:hadoop fs -rm /test/city_data /test/monitor_data
eg3:hadoop fs -rmr /test /file
9. tail
tail命令可以将文件尾部1KB的内容输出到标准输出。并且tail命令支持“-f”选项,加上“-f”选项表示实时显示文件内容。
hadoop fs -tail [-f] <hdfs:pathFile>
10. text
text命令可以将HDFS中的源文件以文本格式输出。
hadoop fs -text <hdfs:pathFile>
11. expunge
expunge命令的字面意思是“清除”,它在Hadoop中的作用是清空回收站。
hadoop fs -expunge
以上是常用的HDFS命令的总结,除此之外,还可以使用Java API对HDFS中的文件进行操作,等我学完后再做补充。