菜鸟科技网

HDFS Shell命令有哪些常用操作?

HDFS(Hadoop Distributed File System)作为Hadoop生态系统的核心组件,提供了丰富的Shell命令用于文件和目录的管理操作,这些命令通过hdfs dfshdfs dfsadmin等前缀调用,支持类似Linux文件系统的操作语法,同时针对分布式环境的特点进行了优化,以下将详细介绍HDFS Shell命令的核心功能及使用场景。

HDFS Shell命令有哪些常用操作?-图1
(图片来源网络,侵删)

基础文件操作命令

文件与目录创建

  • hdfs dfs -mkdir [-p] <path>:创建目录,-p选项可递归创建多级目录。hdfs dfs -mkdir -p /user/data/input会在/user目录不存在时自动创建完整路径。
  • hdfs dfs -touchz <file>:创建空文件,若文件已存在则更新其时间戳,适用于需要初始化文件场景,如hdfs dfs -touchz /user/data/empty.txt

文件上传与下载

  • hdfs dfs -put [-f] <localsrc> <hdfsdest>:将本地文件或目录上传至HDFS。-f选项覆盖已存在文件。hdfs dfs -put /local/data.txt /user/data/
  • hdfs dfs -copyFromLocal [-f] <localsrc> <hdfsdest>:功能与put类似,但更强调本地到HDFS的复制操作。
  • hdfs dfs -get [-f] <hdfssrc> <localdest>:从HDFS下载文件到本地,支持-f覆盖选项。hdfs dfs -get /user/data/output.txt /local/download/
  • hdfs dfs -copyToLocal [-f] <hdfssrc> <localdest>:与get功能等效,常用于明确区分下载操作。

文件移动与重命名

  • hdfs dfs -mv <src> <dest>:移动或重命名文件/目录,跨目录移动时需确保目标路径存在,如hdfs dfs -mv /user/data/file1.txt /user/backup/
  • hdfs dfs -cp [-f] <src> <dest>:复制文件/目录,-f可覆盖目标,支持递归复制目录,hdfs dfs -cp -r /user/input /user/backup_input

文件查看与内容操作

查看

  • hdfs dfs -cat <file>:显示文件全部内容,适用于小文件查看。hdfs dfs -cat /user/data/log.txt
  • hdfs dfs -head [-n <num>] <file>:显示文件前n行,默认前1000行。hdfs dfs -head -n 50 /user/data/large_file.txt
  • hdfs dfs -tail [-f] [-n <num>] <file>:显示文件末尾n行,-f支持实时追踪更新,适用于日志文件监控,如hdfs dfs -tail -f /user/data/app.log

文件合并与分割

  • hdfs dfs -getmerge <src> <localdest> [addnl]:将HDFS目录下多个文件合并下载到本地文件,addnl参数表示在每行末尾添加换行符。hdfs dfs -getmerge /user/data/part* /local/merged_output.txt

文件信息与权限管理

文件状态查询

  • hdfs dfs -ls [-d] [-h] [-R] <path>:列出目录内容。-d显示目录本身而非内容,-h以人类可读格式显示大小(如KB/MB),-R递归显示子目录。hdfs dfs -ls -h -R /user/data
  • hdfs dfs -stat [format] <path>:显示文件状态信息,支持自定义格式(如%n文件名、%s大小)。hdfs dfs -stat "%n %s %y" /user/data/file.txt

权限与所有权

  • hdfs dfs -chmod [-R] <mode> <path>:修改文件/目录权限,-R递归修改。hdfs dfs -chmod 755 /user/data
  • hdfs dfs -chown [-R] <owner>:<group> <path>:修改文件所有者和所属组。hdfs dfs -chown -R hadoop:hadoop /user/data

存储空间与副本管理

空间使用分析

  • hdfs dfs -du [-s] [-h] <path>:显示文件/目录大小。-s汇总目录总大小,-h以人类可读格式显示。hdfs dfs -du -sh /user/data
  • hdfs dfs -df [-h] [<path>]:显示文件系统整体空间使用情况,-h格式化输出。hdfs dfs -df -h /

副本控制

  • hdfs dfs -setrep [-R] [-w] <replication> <path>:设置文件副本数。-R递归设置目录下所有文件,-w等待操作完成。hdfs dfs -setrep -w 3 /user/data/large_file.txt

高级管理命令

文件校验与完整性

  • hdfs dfs -checksum <file>:计算文件校验和,用于验证文件完整性。hdfs dfs -checksum /user/data/file.txt
  • hdfs fsck <path>:检查文件块完整性,显示块状态和副本分布。hdfs fsck /user/data -files -blocks

临时文件清理

  • hdfs dfs -expunge:清空垃圾回收站(.Trash目录),HDFS删除的文件会先移至.Trash,执行此命令后永久删除。

文件归档与压缩

  • hdfs dfs -archiveName <name>.jar -p <parent> <src>* <dest>:将多个小文件归档为HAR(Hadoop Archive)文件,减少NameNode内存占用。hdfs dfs -archiveName data.har -p /user/data /user/data/part* /user/archive/

常用命令参数速查表

命令类别 常用命令 关键参数说明
目录操作 mkdir, ls, rm, mv -p递归创建,-R递归操作
文件传输 put, get, copyFromLocal -f覆盖,-r递归复制
权限管理 chmod, chown -R递归修改
空间分析 du, df, count -h人类可读格式,-s汇总统计
副本控制 setrep -w等待操作完成
高级功能 fsck, expunge, archiveName fsck检查块完整性,expunge清空垃圾站

FAQs

Q1: HDFS中如何快速查找包含特定字符串的文件?
A1: 可结合hdfs dfs -findxargs实现。hdfs dfs -find /user/data -name "*.txt" -exec grep -l "error" {} \;,该命令会递归查找/user/data下所有.txt文件并输出包含"error"的文件名,若需更高效处理,可先将文件下载至本地后使用grep -r命令。

Q2: 为什么HDFS删除文件后磁盘空间没有立即释放?
A2: HDFS采用延迟删除机制,删除的文件会先移动到.Trash目录(默认保留期为删除时的集群时间配置),只有执行hdfs dfs -expunge.Trash目录中的文件超过保留期后,空间才会被真正释放,若文件正在被其他进程读取,HDFS会等待所有读取操作完成后才释放空间。

HDFS Shell命令有哪些常用操作?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇