Hadoop FileSystem Shell 常用操作命令

提示:本文章只总结一下常用的哈,详细的命令大家可以移步官方的文档(链接贴在下面了哈🤣)--- HDFS官方命令手册链接

目录

  • [1. cat 命令:查看 HDFS 文件内容](#1. cat 命令:查看 HDFS 文件内容)
  • [2. put 命令:将本地文件上传到 HDFS](#2. put 命令:将本地文件上传到 HDFS)
  • [3. get 命令:从HDFS下载文件到本地](#3. get 命令:从HDFS下载文件到本地)
  • [4. chmod 命令:更改 HDFS中文件和目录的权限](#4. chmod 命令:更改 HDFS中文件和目录的权限)
  • [5. chown 命令:更改 HDFS中文件或目录的所有者和所属组](#5. chown 命令:更改 HDFS中文件或目录的所有者和所属组)
  • [6. cp 命令:将文件或目录从一个位置复制到另一个位置](#6. cp 命令:将文件或目录从一个位置复制到另一个位置)
  • [7. du 命令:显示指定目录中所有文件和子目录的大小](#7. du 命令:显示指定目录中所有文件和子目录的大小)
  • [8. dus 命令:显示指定文件或目录的总大小](#8. dus 命令:显示指定文件或目录的总大小)
  • [9. ls 命令:列出 HDFS 中指定路径的文件或目录信息](#9. ls 命令:列出 HDFS 中指定路径的文件或目录信息)
  • [10.lsr 命令:列出 HDFS 中指定路径的所有文件和目录,递归遍历子目录](#10.lsr 命令:列出 HDFS 中指定路径的所有文件和目录,递归遍历子目录)
  • [11.mkdir 命令:创建一个或多个目录,支持创建多级父目录](#11.mkdir 命令:创建一个或多个目录,支持创建多级父目录)
  • 12.rm命令:删除指定的文件或文件列表
  • 13.tail:查看文件的最后部分内容
  • 14.head:查看文件的开头部分内容
  • 15.mv命令:移动文件或目录,或重命名文件
  • 整理不易,一键三连呀列位看官老爷们~万福金安!🤣🤣🤣

1. cat 命令:查看 HDFS 文件内容

类似于 Linux 中的 cat 命令,将文件的内容输出到标准输出(通常是终端)。

bash 复制代码
hadoop fs -cat <hdfs_path>
  • <hdfs_path>:要查看的文件在 HDFS 中的路径。
bash 复制代码
hadoop fs -cat /user/hadoop/gushi.txt
《淮上与友人别》- 郑谷 唐

扬子江头杨柳春,杨花愁杀渡江人。
数声风笛离亭晚,君向潇湘我向秦。

君向潇湘我向秦,这首诗太浪漫了 列位🤣🤣🤣

Tips:

  • cat 命令只适合查看小文件的内容哈。文件过大,建议配合 headtail,只查看文件的前几行或最后几行。

  • 如果文件不存在,报错:

    File /user/hadoop/file.txt does not exist
    

bash 复制代码
hadoop fs -cat URI [URI ...]

也可以使用URL哈~

  1. 查看单个文件内容

    bash 复制代码
    hadoop fs -cat hdfs://host1:port1/file1
  2. 查看多个文件内容

    bash 复制代码
    hadoop fs -cat hdfs://host1:port1/file1 hdfs://host2:port2/file2
  3. 查看本地文件和 HDFS 文件

    bash 复制代码
    hadoop fs -cat file:///file3 /user/hadoop/file4

    同时输出本地文件 file3 和 HDFS 文件 file4 的内容。


2. put 命令:将本地文件上传到 HDFS

hadoop fs -put 命令将本地文件或目录上传到HDFS。

bash 复制代码
hadoop fs -put <local_path> <hdfs_path>
  • <local_path>:要上传的本地文件或目录的路径。
  • <hdfs_path>:目标 HDFS 目录的路径。
  1. 上传单个文件

    bash 复制代码
    hadoop fs -put localfile /user/hadoop/hadoopfile

    将本地的 localfile 上传到 HDFS 的 /user/hadoop/hadoopfile 路径下。

  2. 上传多个文件

    bash 复制代码
    hadoop fs -put localfile1 localfile2 /user/hadoop/hadoopdir

    localfile1localfile2 同时上传到 HDFS 的 /user/hadoop/hadoopdir 目录下。

  3. 使用 HDFS URI

    bash 复制代码
    hadoop fs -put localfile hdfs://host:port/hadoop/hadoopfile

    这条命令通过指定 HDFS URI,将 localfile 上传到指定的 HDFS 路径。

  4. 从标准输入上传

    bash 复制代码
    hadoop fs -put - hdfs://host:port/hadoop/hadoopfile

    使用 - 表示从标准输入读取数据并上传到 HDFS 的指定路径。通常用于管道操作。


bash 复制代码
hadoop fs -put  /home/yushifu/hongloumeng.txt  /user/hadoop/

ls 命令查看 HDFS 中的文件:

bash 复制代码
hadoop fs -ls /user/hadoop/
Found 1 items
-rw-r--r--   3 hadoop supergroup      28 2024-09-26 12:00 /user/hadoop/hongloumeng.txt

cat 命令:

bash 复制代码
hadoop fs -cat /user/hadoop/hongloumeng.txt
     好了歌 曹雪芹 清
世人都晓神仙好,惟有功名忘不了!
古今将相在何方?荒冢一堆草没了。
世人都晓神仙好,只有金银忘不了!
终朝只恨聚无多,及到多时眼闭了。
世人都晓神仙好,只有娇妻忘不了!
君生日日说恩情,君死又随人去了。
世人都晓神仙好,只有儿孙忘不了!
痴心父母古来多,孝顺儿孙谁见了?

终朝只恨聚无多,及到多时眼闭了(感触颇深呀)

Tips:

  • -p:保留文件的原属性(如权限、时间戳等)。

    bash 复制代码
    hadoop fs -put -p /home/yushifu/hongloumeng.txt   /user/hadoop/
  • -f:强制覆盖已有文件。

    bash 复制代码
    hadoop fs -put -f /home/yushifu/hongloumeng.txt   /user/hadoop/

3. get 命令:从HDFS下载文件到本地

bash 复制代码
hadoop fs -get <hdfs_path> <local_path>
  • <hdfs_path>:要下载的 HDFS 文件的路径。
  • <local_path>:下载后保存到本地文件系统的路径。

  1. 下载单个文件

将HDFS 文件 /user/hadoop/gushi.txt 下载到本地 /home/user/

bash 复制代码
hadoop fs -get /user/hadoop/gushi.txt /home/user/
  1. 下载整个目录

下载 HDFS 中的目录( /user/hadoop/):

bash 复制代码
hadoop fs -get /user/hadoop/my_directory/ /home/user/

  • -p:保留文件的原属性(如权限、时间戳等)。

    bash 复制代码
    hadoop fs -get -p /user/hadoop/example.txt /home/user/
  • -f:如果目标位置已经存在同名文件,则强制覆盖。

    bash 复制代码
    hadoop fs -get -f /user/hadoop/example.txt /home/user/

bash 复制代码
hadoop fs -get [-ignorecrc] [-crc] <src> <localdst>
  • 从 HDFS 将文件复制到本地文件系统。

  • 可选参数允许处理 CRC 校验。

  • -ignorecrc:复制 CRC 校验失败的文件。

  • -crc:同时复制文件及其 CRC 信息。

  1. 从 HDFS 复制文件到本地

    bash 复制代码
    hadoop fs -get /user/hadoop/file localfile

    将 HDFS 中的 /user/hadoop/file 复制到当前目录下的 localfile

  2. 使用 HDFS URI

    bash 复制代码
    hadoop fs -get hdfs://host:port/user/hadoop/file localfile

    指定 HDFS URI,将文件复制到本地的 localfile


4. chmod 命令:更改 HDFS中文件和目录的权限

bash 复制代码
hadoop fs -chmod <mode> <path>
  • <mode>:权限设置,可以使用符号模式或八进制模式。
  • <path>:要更改权限的文件或目录的 HDFS 路径。

权限类型:

  • 读 (r):允许读取文件或列出目录内容。
  • 写 (w):允许修改文件或创建、删除目录中的文件。
  • 执行 (x):允许进入目录。

权限分为三种用户:

  • 所有者 (u):文件或目录的创建者。
  • 组 (g):与所有者同属一个组的用户。
  • 其他 (o):系统中所有其他用户。

  1. 给文件添加读权限

    bash 复制代码
    hadoop fs -chmod +r /path/to/file
  2. 去掉组的写权限

    bash 复制代码
    hadoop fs -chmod g-w /path/to/file

八进制模式:

  • 只读4r--
  • 只写2-w-
  • 只执行1--x
  • 读+写4 + 2 = 6rw-
  • 读+执行4 + 1 = 5r-x
  • 写+执行2 + 1 = 3-wx
  • 读+写+执行4 + 2 + 1 = 7rwx

八进制权限通常由三个数字组成,分别表示:

  1. 所有者(user)
  2. 组(group)
  3. 其他用户(other)

eg.

  • 755 的意思是:
    • 所有者:7rwx,可读、可写、可执行)
    • 组:5r-x,可读、可执行)
    • 其他用户:5r-x,可读、可执行)
  1. 设置权限为 644

    bash 复制代码
    hadoop fs -chmod 644 /path/to/file

    这里:

    • 所有者有读、写权限(rw-,值 6
    • 组有读权限(r--,值 4
    • 其他用户有读权限(r--,值 4
  2. 设置权限为 770

    bash 复制代码
    hadoop fs -chmod 770 /path/to/directory
    • 所有者有读、写、执行权限(rwx,值 7
    • 组有读、写、执行权限(rwx,值 7
    • 其他用户没有任何权限(---,值 0

5. chown 命令:更改 HDFS中文件或目录的所有者和所属组

执行 chown 命令的用户必须有足够的权限才能修改文件或目录的所有者和组,通常只有超级用户(如 HDFS 的管理员)能够更改其他用户的所有权。

bash 复制代码
hadoop fs -chown <owner>:<group> <path>
  • <owner>:要设置的新所有者用户名。
  • <group>:要设置的新所属组名(可选)。
  • <path>:要更改所有者和组的文件或目录的 HDFS 路径。
  1. 更改文件所有者

    bash 复制代码
    hadoop fs -chown newuser /path/to/file

    /path/to/file 的所有者更改为 newuser,组保持不变。

  2. 更改文件所有者和组

    bash 复制代码
    hadoop fs -chown newuser:newgroup /path/to/file

    /path/to/file 的所有者更改为 newuser,并将所属组更改为 newgroup

  3. 更改目录的所有者及组

    bash 复制代码
    hadoop fs -chown newuser:newgroup /path/to/directory
  4. 递归更改目录及其内容的所有者和组

    bash 复制代码
    hadoop fs -chown -R newuser:newgroup /path/to/directory

    -R 选项可以递归地更改指定目录及其所有子目录和文件的所有者和组。


6. cp 命令:将文件或目录从一个位置复制到另一个位置

bash 复制代码
hadoop fs -cp [options] <source> <destination>
  • <source>:要复制的文件或目录的路径。
  • <destination>:复制到的目标路径。

option:

  • -f:强制覆盖目标文件,如果目标文件已存在,则不提示。
  • -p:保留源文件的权限、时间戳和所有者信息。
  • -R:递归复制,适用于目录(文件夹)及其所有内容。

  1. 复制单个文件

    bash 复制代码
    hadoop fs -cp /path/to/source/file.txt /path/to/destination/
  2. 复制多个文件

    bash 复制代码
    hadoop fs -cp /path/to/source/file1.txt /path/to/source/file2.txt /path/to/destination/
  3. 递归复制目录

    bash 复制代码
    hadoop fs -cp -R /path/to/source/directory /path/to/destination/
  4. 强制覆盖目标文件

    bash 复制代码
    hadoop fs -cp -f /path/to/source/file.txt /path/to/destination/file.txt
  5. 保留文件属性

    bash 复制代码
    hadoop fs -cp -p /path/to/source/file.txt /path/to/destination/
  • 确保源路径和目标路径都是有效的 HDFS 路径。如果路径不正确,命令将返回错误。

7. du 命令:显示指定目录中所有文件和子目录的大小

bash 复制代码
hadoop fs -du URI [URI ...]

如果只指定一个文件,则显示该文件的大小。

  1. 查看目录大小

    bash 复制代码
    hadoop fs -du /user/hadoop/dir1
    1024  /user/hadoop/dir1/file1.txt
    2048  /user/hadoop/dir1/file2.txt
    3072  /user/hadoop/dir1/subdir
    
  2. 查看多个路径

    bash 复制代码
    hadoop fs -du /user/hadoop/dir1 /user/hadoop/file1
  3. 使用 HDFS URI

    bash 复制代码
    hadoop fs -du hdfs://host:port/user/hadoop/dir1

    通过 HDFS URI 来显示目录的大小。

8. dus 命令:显示指定文件或目录的总大小

bash 复制代码
hadoop fs -dus <args>
  • dus命令更关注总大小,而不是逐个列出每个文件
  1. 查看单个目录的总大小

    bash 复制代码
    hadoop fs -dus /user/hadoop/dir1
    6144  /user/hadoop/dir1
    
  2. 查看文件的大小

    bash 复制代码
    hadoop fs -dus /user/hadoop/file1
    1024  /user/hadoop/file1
    
  3. 使用 HDFS URI

    bash 复制代码
    hadoop fs -dus hdfs://host:port/user/hadoop/dir1

    通过 HDFS URI 来获取目录的总大小。


9. ls 命令:列出 HDFS 中指定路径的文件或目录信息

bash 复制代码
hadoop fs -ls <args>
  • 列出 HDFS 中指定路径的文件或目录信息。

  • 文件文件名 <副本数> 文件大小 修改日期 修改时间 权限 用户ID 组ID

  • 目录目录名 <dir> 修改日期 修改时间 权限 用户ID 组ID

bash 复制代码
hadoop fs -ls /user/hadoop/file1 /user/hadoop/file2 hdfs://host:port/user/hadoop/dir1 /nonexistentfile
  • 列出指定路径的文件和目录信息。
  • /user/hadoop/file1/user/hadoop/file2 是要检查的文件。
  • hdfs://host:port/user/hadoop/dir1 是要检查的目录。
  • /nonexistentfile 用于检查不存在的文件。
plaintext 复制代码
-rw-r--r--    3 1024 2024-09-25 10:00 /user/hadoop/file1
-rw-r--r--    1 2048 2024-09-25 10:05 /user/hadoop/file2
drwxr-xr-x    -    0 2024-09-24 09:30 /user/hadoop/dir1
  • 第一行表示 file1 的信息,包括权限、复制数、大小、修改日期和时间等。
  • 第二行表示 file2 的信息。
  • 第三行表示 dir1 是一个目录。

10.lsr 命令:列出 HDFS 中指定路径的所有文件和目录,递归遍历子目录

bash 复制代码
hadoop fs -lsr <args>
  • 列出 HDFS 中指定路径的所有文件和目录,递归遍历子目录。
plaintext 复制代码
drwxr-xr-x    -    0 2024-09-24 09:30 /user/hadoop/dir1
-rw-r--r--    3 1024 2024-09-25 10:00 /user/hadoop/file1
drwxr-xr-x    -    0 2024-09-24 09:32 /user/hadoop/dir1/subdir1
-rw-r--r--    1 2048 2024-09-25 10:05 /user/hadoop/file2
  • 显示 /user/hadoop 及其子目录 dir1subdir1 的所有文件和目录。

11.mkdir 命令:创建一个或多个目录,支持创建多级父目录

bash 复制代码
hadoop fs -mkdir <paths>
  • 创建一个或多个目录,支持创建多级父目录。
bash 复制代码
hadoop fs -mkdir /user/hadoop/dir1 /user/hadoop/dir2
hadoop fs -mkdir hdfs://host1:port1/user/hadoop/dir hdfs://host2:port2/user/hadoop/dir
plaintext 复制代码
mkdir: `/user/hadoop/dir1': Created
mkdir: `/user/hadoop/dir2': Created
mkdir: `hdfs://host1:port1/user/hadoop/dir': Created
mkdir: `hdfs://host2:port2/user/hadoop/dir': Created
  • 每一行表示成功创建的目录。

12.rm命令:删除指定的文件或文件列表

bash 复制代码
hadoop fs -rm <path1> [<path2> ...]
bash 复制代码
hadoop fs -rm /user/hadoop/file1 /user/hadoop/file2
  • 删除操作是不可逆的,请确保在执行命令之前备份重要数据。

  • 使用 -f 选项可以强制删除文件而不提示确认。

    bash 复制代码
    hadoop fs -rm -f /user/hadoop/file1

当然可以!以下是关于 hadoop fs -tailhadoop fs -head 命令的详细讲解:

13.tail:查看文件的最后部分内容

  • 默认情况下是最后 1 KB
bash 复制代码
hadoop fs -tail <path>

eg.:

bash 复制代码
hadoop fs -tail /user/hadoop/file.txt
plaintext 复制代码
Last few lines of the file...
Line 98: Error occurred at ...
Line 99: Processing complete.

14.head:查看文件的开头部分内容

  • 默认情况下是前 1 KB。
bash 复制代码
hadoop fs -head <path>

eg.

bash 复制代码
hadoop fs -head /user/hadoop/file.txt
plaintext 复制代码
First few lines of the file...
Line 1: Starting process...
Line 2: Initialization complete.

15.mv命令:移动文件或目录,或重命名文件

bash 复制代码
hadoop fs -mv <source> <destination>
  1. 移动文件

    bash 复制代码
    hadoop fs -mv /user/hadoop/file.txt /user/hadoop/backup/file.txt
  2. 重命名文件

    bash 复制代码
    hadoop fs -mv /user/hadoop/oldname.txt /user/hadoop/newname.txt
  3. 移动目录

    bash 复制代码
    hadoop fs -mv /user/hadoop/dir1 /user/hadoop/archive/dir1

整理不易,一键三连呀列位看官老爷们~万福金安!🤣🤣🤣

相关推荐
全栈开发圈6 分钟前
干货分享|分布式数据科学工具 Xorbits 的使用
分布式
智慧化智能化数字化方案28 分钟前
华为IPD流程管理体系L1至L5最佳实践-解读
大数据·华为
PersistJiao2 小时前
在 Spark RDD 中,sortBy 和 top 算子的各自适用场景
大数据·spark·top·sortby
2301_811274312 小时前
大数据基于Spring Boot的化妆品推荐系统的设计与实现
大数据·spring boot·后端
Yz98762 小时前
hive的存储格式
大数据·数据库·数据仓库·hive·hadoop·数据库开发
青云交2 小时前
大数据新视界 -- 大数据大厂之 Hive 数据导入:多源数据集成的策略与实战(上)(3/ 30)
大数据·数据清洗·电商数据·数据整合·hive 数据导入·多源数据·影视娱乐数据
武子康2 小时前
大数据-230 离线数仓 - ODS层的构建 Hive处理 UDF 与 SerDe 处理 与 当前总结
java·大数据·数据仓库·hive·hadoop·sql·hdfs
武子康2 小时前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql
运维&陈同学2 小时前
【zookeeper01】消息队列与微服务之zookeeper工作原理
运维·分布式·微服务·zookeeper·云原生·架构·消息队列
时差9532 小时前
Flink Standalone集群模式安装部署
大数据·分布式·flink·部署