当前常见的可以操作hdfs的命令包括以下几种: hadoop fs:使用面最广,可以操作任何文件系统。
hdfs dfs:只能操作HDFS文件系统相关,如果只操作HDFS文件系统,可使用此命令。
hadoop dfs:只能操作HDFS文件系统相关,此命令已经不推荐使用。 如果无特殊需要,推荐使用hadoop fs命令进行操作。 本文档使用hadoop fs命令。
命令基本格式:
hadoop fs -cmd < args >
1.ls
hadoop fs -ls /
列出hdfs文件系统根目录下的目录和文件,/ 表示当前hdfs文件系统的根目录。
一个全新没有任何操作的hdfs文件系统中/目录下应该没有任何文件或文件夹,因此执行后无任何显示结果。
在浏览器中也可以看到相关信息
1
当执行以下命令时会出现错误提示,具体原因是s默认目录是在hdfs文件系统的/user/用户名(用户名就命令行@符号前面的那个东西),但是你的hdfs系统内没有这个文件夹,所以会显示No such file or directory。
注意:hdfs的根目录不同于默认目录。
后续介绍mkdir命令时再做相关说明。
hadoop fs -ls -R /
列出hdfs文件系统所有的目录和文件,如下图所示,出错误原因同上。/ 根目录下无任何文件或文件夹。
2.mkdir 2.1
hadoop fs -mkdir < hdfs path>
浏览器中也可以看到test文件夹。
2
此命令只能一级一级的建目录,父目录不存在的话使用这个命令会报错,如下图所示:
2.2 hadoop fs -mkdir -p < hdfs path>
所创建的目录如果父目录不存在就创建该父目录
当点击红色位置时可以进入下一级目录abc,及再下级目录ab。
建立在ls命令中未建立的默认文件目录,并显示,不再出现错误提示,如下所示:
3
首先观察以下两个命令的区别,然后判断如果执行以下两个命令那么输出结果分别是什么?
我们看看建立的xyz文件夹的具体位置在哪里?
使用浏览器可以看到我们建立的文件夹实际所处的位置是/user/root/xyz。
我们再看看efg文件的的具体位置在哪里?
可以看到efg文件夹是在根目录 / 下建立的。
希望通过这两个mkdir命令区分hdfs的根目录和默认目录。
3.put
进入linux aaa1-aaa4任意一台虚拟机,进入 /home/aaa/hdpsoft目录下,本目录下应保存有两个文件:
4
使用此文件夹中的jdk文件作为例子进行后续操作。
3.1.hadoop fs -put < local file > < hdfs file >
hdfs file的父目录一定要存在,否则命令不会执行
hadoop fs -put < local file or dir >...< hdfs dir >
5
hdfs dir 一定要存在,否则命令不会执行
hadoop fs -put - < hdsf file>
从键盘读取输入到hdfs file中,按Ctrl+D结束输入,hdfs file不能存在,否则命令不会执行
6
建立abc.txt文件用于演示此命令。
3.2.moveFromLocal
hadoop fs -moveFromLocal < local src > ... < hdfs dst >
与put相类似,命令执行后源文件 local src 被删除,也可以从从键盘读取输入到hdfs file中。
7
为了演示此命令首先在本地目录 /home/aaa/hdpsoft下建立一个命令测试文件,文件名如下,
执行命令后本地存储的moveFromLocaltest.txt文件被删除,如下所示
3.3.copyFromLocal
hadoop fs -copyFromLocal < local src > ... < hdfs dst >
本命令与moveFromLocal作用基本相同,区别在于执行本命令后本地存储的文件不会被删除。
本命令不再截图展示,具体方法请参照moveFromLocal命令。
4.get
hadoop fs -get < hdfs file > < local file or dir>
8
local file不能和 hdfs file名字不能相同,否则会提示文件已存在,没有重名的文件会复制到本地
hadoop fs -get < hdfs file or dir > ... < local dir >
拷贝多个文件或目录到本地时,本地要为文件夹路径
get多个文件时local file不能和 hdfs file名字不能相同,否则会提示文件已存在,没有重名的文件会复制到本地。 注意:如果用户不是root, local 路径要为用户文件夹下的路径,否则会出现权限问题,如下图,当用户为aaa时,将hdfs文件系统下/user/root/abc.txt 取回本地/home/root目录时,提示拒绝。
当用户为aaa时,将hdfs文件系统下/user/root/abc.txt 取回本地/home/aaa目录时,可以正常执行。
9
4.1.moveToLocal
hadoop fs -moveToLocal < hdfs src > ... < local dst >
与get相类似,执行此命令后
hdfs中被复制到本地的文件将被删除。但是此命令在当前版本下还未实
现其功能。
4.2.copyToLocal
hadoop fs -copyToLocal < hdfs src > ... < local dst >
与get相类似,执行此命令后
hdfs中被复制到本地的文件不会被删除。
如果本地目标地址存在相同文件,则不会被拷贝到本地目标地址,如果无相同文件则执行
5.rm
hadoop fs -rm < hdfs file > ... hadoop fs -rm -r < hdfs dir>...
每次可以删除多个文件或目录,具体过程可参考如下截图。
下图所示删除了/user/root/jdktest.tar.gz文件。
10
同时删除两个文件,文件名为jdktest1.tar.gz 和 jdktest2.tar.gz,如果删除文件时不指定被删除文件目录,默认会删除/user/用户名/目录下的文件,本例使用root用户。
删除hdfs文件系统中的某个文件夹,
空文件夹可以直接删除,如下图所示。
6.getmerge
11
首先建立getmergetestdir文件夹,并建立几个文件用于合并,分别为a.txt b.txt c.txt.
将文件复制到hdfs文件系统的/user/root下。
hadoop fs -getmerge < hdfs dir > < local file >
将hdfs指定目录下所有文件排序后合并到local指定的文件中,文件不存在时会自动创建,文件存在时会覆盖里面的内容,
hadoop fs -getmerge -nl < hdfs dir > < local file >
加上nl后,合并到local file中的hdfs文件之间会空出一行,如下所示。
12
7.cp
hadoop fs -cp < hdfs file > < hdfs file >
目标文件不能存在,否则命令不能执行,相当于给文件重命名并保存,源文件还存在
在一次执行上图的-cp命令,由于目标文件已经存在,因此不能本次-cp命令不能执行,如下图所示。
hadoop fs -cp < hdfs file or dir >... < hdfs dir >
目标文件夹要存在,否则命令不能执行,建立两个文件夹用于演示命令,testdir和cptestdir。
复制一个文件到指定文件夹,
13
如果复制一个文件到不存在的目录,那么命令不能执行。
14
因篇幅问题不能全部显示,请点此查看更多更全内容