hadoop fs 和 hdfs dfs 是两个命令行工具,它们的功能和用途基本相同,都是用来与Hadoop的分布式文件系统(HDFS)进行交互的。这两个命令实际上是同一个工具的不同调用方式。
命令形式:
- hadoop fs:这是较早的命令形式,通过Hadoop的主命令hadoop来调用文件系统相关的子命令。
- hdfs dfs:这是较新的命令形式,直接通过hdfs命令来调用文件系统相关的子命令。
兼容性和使用习惯:
- hadoop fs:在较旧版本的Hadoop中更为常见,许多早期的文档和教程中都使用这个命令。
- hdfs dfs:在较新版本的Hadoop中推荐使用这个命令,因为它更加直观和简洁。
功能:
- 无论是hadoop fs还是hdfs dfs,它们支持的子命令和功能是完全相同的。例如,-ls、-put、-get、-mkdir、-rm等子命令在两个命令中都可以使用。
列出HDFS根目录下的文件和目录
hdfs dfs -ls [-C] [-R] /
- -C:可选参数,只列出文件名
- -R:可选参数,列出所有子目录和文件
创建目录
hdfs dfs -mkdir [-p] <HDFS路径>
- -p:可选参数,表示递归创建目录。如果中间的某个目录不存在,也会被创建。
hdfs dfs -mkdir /hdfs/path/to/directory
hdfs dfs -mkdir -p /hdfs/path/to/directory
上传文件到HDFS
hdfs dfs -put <本地文件路径> <HDFS目标路径>
假设你想将本地的 /tmp/myfile.txt 文件上传到HDFS的 /user/username/input 目录:
hdfs dfs -put /tmp/mydir /user/username/input/
下载文件到HDFS
hdfs dfs -get <HDFS文件路径> <本地目标路径>
假设你想从HDFS的 /test/input/file1.txt 下载文件到本地的 /home/user/ 目录:
hdfs dfs -get /test/input/file1.txt /home/user/
查看HDFS文件内容
查看文件的全部内容
hdfs dfs -cat <HDFS文件路径>
假设你想查看HDFS中 /user/username/input/myfile.txt 文件的内容:
hdfs dfs -cat /user/username/input/myfile.txt
查看文件的前几行
如果你只想查看文件的前几行,可以使用 hdfs dfs -cat 命令结合 head 命令。
hdfs dfs -cat <HDFS文件路径> | head -n <行数>
假设你想查看HDFS中 /user/username/input/myfile.txt 文件的前10行内容:
hdfs dfs -cat /user/username/input/myfile.txt | head -n 10
查看文件的末尾部分内容
hdfs dfs -tail <HDFS文件路径>
假设你想查看HDFS中 /user/username/input/bigfile.txt 文件的末尾1 KB内容:
hdfs dfs -tail /user/username/input/bigfile.txt
复制文件或目录
在HDFS中复制文件或目录可以使用 hdfs dfs -cp 命令。这个命令允许你在HDFS内部复制文件或目录。
hdfs dfs -cp <HDFS文件路径> <HDFS目标路径>
假设你想将HDFS中的 /user/username/input/myfile.txt 文件复制到 /user/username/output/ 目录下:
hdfs dfs -cp /user/username/input/myfile.txt /user/username/output/
删除文件或目录
可以使用 -rm 删除文件,但不能删除目录
hdfs dfs -rm [-skipTrash] [-r] [-f] <HDFS文件路径>
-r:可选参数,删除目录及其所有内容。
-f:可选参数,可以强制删除目录及其内容,而不会提示确认。
-skipTrash:可选参数,在删除文件或目录时,跳过回收站(Trash)。
移动文件或目录
在HDFS中移动文件或目录可以使用 hdfs dfs -mv 命令。这个命令允许你在HDFS内部移动文件或目录。
hdfs dfs -mv <HDFS文件路径> <HDFS目标路径>
如果目标路径已经存在同名目录,命令会失败。
工作目录
在HDFS(Hadoop Distributed File System)中,工作目录是指用户当前所在的目录,类似于你在本地文件系统中使用的当前工作目录。工作目录的概念有助于简化路径的指定,使用户能够更方便地进行文件和目录操作。
工作目录的基本概念
默认工作目录:
- 当用户首次登录HDFS时,默认的工作目录通常是 /user/<username>,其中 <username> 是用户的用户名。
- 例如,如果用户名是 alice,那么默认的工作目录就是 /user/alice。
显示当前工作目录:
- 使用 hdfs dfs -pwd 命令可以显示当前的工作目录。
hdfs dfs -pwd
切换工作目录:
- 使用 hdfs dfs -cd <HDFS目录路径> 命令可以切换当前的工作目录。
hdfs dfs -cd /user/username/newdir
使用相对路径
假设你有一个HDFS目录结构如下:
/user/username/
├── input/
│ ├── file1.txt
│ └── file2.txt
└── output/
当你在HDFS中使用相对路径时,路径是相对于当前工作目录的。例如:
如果当前工作目录是 /user/username/input,那么 file1.txt 的相对路径就是 file1.txt。
如果当前工作目录是 /user/username,那么 input/file1.txt 的相对路径就是 input/file1.txt。
HDFS 权限模型
1. 默认权限模型
在默认权限模型中,HDFS使用类似于Unix的权限系统,每个文件和目录都有三个权限类别:
- 用户(User)
- 组(Group)
- 其他(Others)
每个类别有三种权限:读(Read, r)、写(Write, w)和执行(Execute, x)。
- 读(r):允许读取文件内容或列出目录内容。
- 写(w):允许写入文件内容或删除/修改目录内容。
- 执行(x):允许执行文件或进入目录。
权限可以用八进制数表示,其中:
- 4 表示读权限(r)
- 2 表示写权限(w)
- 1 表示执行权限(x)
例如:
755 表示用户有读、写、执行权限,组和其他用户有读、执行权限。
644 表示用户有读、写权限,组和其他用户只有读权限。
2. 超级用户权限模型
在超级用户权限模型中,HDFS的超级用户(通常是 hdfs 用户)可以绕过权限检查,对任何文件或目录进行操作。超级用户可以更改任何文件或目录的权限和所有者。
更改文件或目录权限
hdfs dfs -chmod [-R] <mode> <path>
- -R:可选参数,递归更改目录及其子目录和文件的权限。
- <mode>:权限模式,可以是八进制数或符号模式。
- <path>:要更改权限的文件或目录路径。
使用八进制数更改权限
hdfs dfs -chmod 755 /user/username/directory
755:这个权限模式表示:
- 用户(User):7(读、写、执行)
- 组(Group):5(读、执行)
- 其他(Others):5(读、执行)
具体来说:
- 7:4 + 2 + 1,表示读(r)、写(w)、执行(x)权限。
- 5:4 + 0 + 1,表示读(r)、不写(-)、执行(x)权限。
使用符号模式更改权限
符号模式的格式为 [ugoa][+-=][rwx],其中:
- u:用户(文件所有者)
- g:组
- o:其他
- a:所有(用户、组、其他)
- +:添加权限
- -:移除权限
- =:设置权限
例如:
hdfs dfs -chmod u+x /user/username/file.txt
这条命令将给文件 /user/username/file.txt 的所有者(用户)添加执行权限。
hdfs dfs -chmod go-r /user/username/file.txt
这条命令将从文件 /user/username/file.txt 的组和其他用户移除读权限。
以上就是Hadoop HDFS 命令行工具 hadoop fs 和 hdfs dfs 基本使用指南了,如果你喜欢这篇文章,不妨点赞关注支持一下。
版权归原作者 Salt327 所有, 如有侵权,请联系我们删除。