当前位置:首页 > 行业动态 > 正文

hdfs文件存储命令

HDFS文件存储常用命令包括: put上传文件, get下载文件, ls列出目录, rm删除文件, cat查看内容, mkdir创建目录, touchz创建空文件,均通过 hdfs dfs指令

HDFS文件存储命令详解

HDFS(Hadoop Distributed File System)是Hadoop生态系统中的核心组件,用于存储大规模数据,掌握HDFS文件操作命令是管理和使用HDFS的基础,以下是HDFS文件存储相关命令的详细说明,包括命令功能、语法、参数及使用场景。


HDFS基础命令

HDFS命令分为两类:

  1. 文件系统操作命令:用于管理文件和目录(如上传、下载、删除)。
  2. 系统管理命令:用于查看集群状态、调整配置等。

以下主要介绍文件系统操作命令。


常用HDFS文件操作命令

命令 功能 语法
put 将本地文件上传到HDFS hdfs dfs -put [本地路径] [HDFS路径]
get 从HDFS下载文件到本地 hdfs dfs -get [HDFS路径] [本地路径]
ls 列出HDFS目录内容 hdfs dfs -ls [路径]
cat 查看HDFS文件内容 hdfs dfs -cat [HDFS文件路径]
rm 删除HDFS文件或目录 hdfs dfs -rm -r [路径]-r表示递归删除目录)
du 查看HDFS文件或目录占用的存储空间 hdfs dfs -du -h [路径]-h以人类可读格式显示,如KB/MB/GB)
touchz 在HDFS中创建一个空文件 hdfs dfs -touchz [HDFS文件路径]
mkdir 在HDFS中创建目录 hdfs dfs -mkdir [路径]
cp 在HDFS内部复制文件或目录 hdfs dfs -cp [源路径] [目标路径]
mv 在HDFS内部移动或重命名文件 hdfs dfs -mv [源路径] [目标路径]
df 查看HDFS集群的存储使用情况 hdfs dfs -df
tail 查看HDFS文件末尾内容 hdfs dfs -tail [HDFS文件路径]
head 查看HDFS文件开头内容 hdfs dfs -head [HDFS文件路径]
setrep 设置HDFS文件的副本数 hdfs dfs -setrep [副本数] [HDFS文件路径]
permission相关 修改HDFS文件或目录的权限 hdfs dfs -chmod [权限] [路径](如755

命令详解与示例

上传文件到HDFS:put

  • 功能:将本地文件或目录上传到HDFS。

  • 语法

    hdfs dfs -put /local/path/file.txt /hdfs/path/
  • 参数

    • -f:强制覆盖已存在的文件。
  • 示例

    hdfs文件存储命令  第1张

    # 上传单个文件
    hdfs dfs -put /home/user/data.txt /user/hdfs/
    # 上传整个目录(递归上传)
    hdfs dfs -put /home/user/dataset /user/hdfs/dataset
  • 注意事项

    • 如果目标路径已存在同名文件,默认会报错;需添加-f参数强制覆盖。
    • 上传大文件时,可通过-f参数结合split优化性能。

下载文件到本地:get

  • 功能:从HDFS下载文件或目录到本地。

  • 语法

    hdfs dfs -get /hdfs/path/file.txt /local/path/
  • 参数

    • -ignoreCrc:忽略CRC校验(谨慎使用)。
  • 示例

    # 下载单个文件
    hdfs dfs -get /user/hdfs/data.txt /home/user/
    # 下载整个目录
    hdfs dfs -get /user/hdfs/dataset /home/user/dataset

查看目录内容:ls

  • 功能:列出HDFS目录中的文件和子目录。
  • 语法
    hdfs dfs -ls /hdfs/path/
  • 输出示例
    Found 3 items
    drwxr-xr-x   root supergroup          0 2023-10-01 12:00 /user/hdfs/dir
    -rw-r--r-  3 root supergroup      1048576 2023-10-01 12:00 /user/hdfs/file.txt
  • 字段说明
    • 权限(如drwxr-xr-x
    • 副本数(如3
    • 所有者(root
    • 用户组(supergroup
    • 文件大小
    • 修改时间
    • 文件/目录名称

删除文件或目录:rm

  • 功能:删除HDFS中的文件或目录。

  • 语法

    # 删除文件
    hdfs dfs -rm /hdfs/path/file.txt
    # 递归删除目录
    hdfs dfs -rm -r /hdfs/path/dir
  • 注意事项

    • 删除操作不可逆,需谨慎使用。
    • 默认不支持非递归删除目录。

查看文件存储占用:du

  • 功能:查看文件或目录占用的存储空间。
  • 语法
    hdfs dfs -du -h /hdfs/path/file.txt
  • 输出示例
    5 M  /user/hdfs/file.txt
  • 参数
    • -h:以人类可读格式(如KB/MB/GB)显示。
    • -s:仅显示总大小(适用于目录)。

创建空文件:touchz

  • 功能:在HDFS中创建一个空文件(常用于占位或触发后续流程)。
  • 语法
    hdfs dfs -touchz /hdfs/path/empty_file.txt

设置文件副本数:setrep

  • 功能:调整HDFS文件的副本数(影响数据可靠性和存储开销)。
  • 语法
    hdfs dfs -setrep 2 /hdfs/path/file.txt
  • 注意事项
    • 副本数范围通常为1(最小可靠性)到3(默认值)。
    • 修改副本数后,HDFS会自动调整数据分布。

修改文件权限:chmod

  • 功能:更改HDFS文件或目录的权限。
  • 语法
    hdfs dfs -chmod 755 /hdfs/path/file.txt
  • 权限说明
    • 755:所有者可读/写/执行,组和其他用户可读/执行。
    • 644:所有者可读/写,其他用户仅可读。

高级命令与场景

查看集群存储使用情况:df

  • 功能:显示HDFS集群的存储容量、已用空间和剩余空间。
  • 语法
    hdfs dfs -df
  • 输出示例
    Filesystem      Size Used Available Use% Mounted on
    hdfs://namenode 10TB   4TB     6TB   40% /

合并小文件:merge(间接操作)

HDFS本身没有直接合并小文件的命令,但可通过以下步骤实现:

  1. 使用getmerge命令将多个小文件合并后下载到本地。
    hdfs dfs -getmerge /hdfs/input/dir /local/output/merged_file.txt
  2. 重新上传合并后的文件到HDFS。

查看文件开头或结尾:headtail

  • 查看文件开头1KB
    hdfs dfs -head /hdfs/path/file.txt
  • 查看文件末尾1KB
    hdfs dfs -tail /hdfs/path/file.txt

常见问题与解决方案

上传文件时提示“权限不足”

  • 原因:当前用户对目标目录没有写权限。
  • 解决
    • 使用管理员权限(如hdfs用户)操作。
    • 修改目标目录权限:
      hdfs dfs -chmod -R 775 /target/dir

rm命令无法删除非空目录

  • 原因:HDFS默认不允许删除非空目录,需添加-r参数。
  • 解决
    hdfs dfs -rm -r /hdfs/path/dir

FAQs

Q1:如何将HDFS文件权限设置为完全可读写?

A1:使用chmod命令设置权限为777

hdfs dfs -chmod 777 /hdfs/path/file.txt

此操作允许所有用户读、写、执行该文件。注意:此操作可能带来安全风险,需谨慎使用。

Q2:如何查看HDFS中某个文件的块大小和副本数?

A2:使用ls命令结合-h参数,

hdfs dfs -ls -h /hdfs/path/file.txt

输出中会显示块大小(Blocksize)和副本数(Replication)。

-rw-r--r-  3 root supergroup       128MB /hdfs/path/file.txt
0