您的当前位置:首页2.1 HDFS 命令及相关解释及实践练习-基础版 -1-7

2.1 HDFS 命令及相关解释及实践练习-基础版 -1-7

2023-03-11 来源:爱问旅游网
2.1 HDFS常用命令、相关解释及实践操作

当前常见的可以操作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

因篇幅问题不能全部显示,请点此查看更多更全内容