跳到主要内容

HDFS 命令操作

HDFS 提供了丰富的命令行工具,用于文件操作、系统管理和故障排查。本章将详细介绍 HDFS 常用命令的使用方法。

命令基础

命令格式

HDFS 命令的基本格式:

hdfs dfs -<command> <args>

或者使用已废弃的格式:

hadoop fs -<command> <args>

推荐使用 hdfs dfs,这是官方推荐的新格式。

获取帮助

# 查看所有命令
hdfs dfs -help

# 查看特定命令帮助
hdfs dfs -help ls

文件操作命令

目录操作

创建目录

# 创建目录
hdfs dfs -mkdir /user/hadoop

# 递归创建多级目录
hdfs dfs -mkdir -p /user/hadoop/data/input

列出目录内容

# 列出目录内容
hdfs dfs -ls /user/hadoop

# 递归列出所有内容
hdfs dfs -ls -R /user/hadoop

# 显示人类可读的大小格式
hdfs dfs -ls -h /user/hadoop

输出字段说明:

drwxr-xr-x   - hadoop supergroup          0 2024-01-15 10:30 /user/hadoop/data
字段说明
drwxr-xr-x权限(d 表示目录)
-副本数(目录为 -)
hadoop所有者
supergroup所属组
0文件大小(字节)
2024-01-15 10:30修改时间
/user/hadoop/data路径

删除目录

# 删除空目录
hdfs dfs -rmdir /user/hadoop/emptydir

# 删除非空目录(递归删除)
hdfs dfs -rm -r /user/hadoop/data

# 删除时不进入回收站
hdfs dfs -rm -r -skipTrash /user/hadoop/data

文件操作

上传文件

# 从本地上传文件到 HDFS
hdfs dfs -put localfile.txt /user/hadoop/

# 从标准输入上传
echo "hello world" | hdfs dfs -put - /user/hadoop/hello.txt

# 移动本地文件到 HDFS(上传后删除本地文件)
hdfs dfs -moveFromLocal localfile.txt /user/hadoop/

# 追加本地文件到 HDFS 文件末尾
hdfs dfs -appendToFile localfile.txt /user/hadoop/existing.txt

下载文件

# 从 HDFS 下载文件到本地
hdfs dfs -get /user/hadoop/remotefile.txt ./

# 下载并合并多个文件
hdfs dfs -getmerge /user/hadoop/output/part-* ./result.txt

复制文件

# HDFS 内复制文件
hdfs dfs -cp /user/hadoop/file1.txt /user/hadoop/backup/

# 从本地复制到 HDFS(等同于 -put)
hdfs dfs -copyFromLocal localfile.txt /user/hadoop/

# 从 HDFS 复制到本地(等同于 -get)
hdfs dfs -copyToLocal /user/hadoop/remotefile.txt ./

移动文件

# HDFS 内移动文件
hdfs dfs -mv /user/hadoop/file1.txt /user/hadoop/archive/

删除文件

# 删除文件
hdfs dfs -rm /user/hadoop/oldfile.txt

# 删除文件不进入回收站
hdfs dfs -rm -skipTrash /user/hadoop/oldfile.txt

查看文件内容

# 查看文件全部内容
hdfs dfs -cat /user/hadoop/file.txt

# 查看文件前几行
hdfs dfs -head /user/hadoop/file.txt

# 查看文件最后几行
hdfs dfs -tail /user/hadoop/file.txt

# 分页查看文件
hdfs dfs -cat /user/hadoop/file.txt | less

# 统计文件行数、字数、字节数
hdfs dfs -cat /user/hadoop/file.txt | wc -l

文件信息查询

# 查看文件大小
hdfs dfs -du /user/hadoop/

# 人类可读格式显示大小
hdfs dfs -du -h /user/hadoop/

# 显示汇总大小
hdfs dfs -du -s -h /user/hadoop/

# 查看文件统计信息
hdfs dfs -stat "%y %n" /user/hadoop/file.txt

stat 格式说明:

格式说明
%b文件大小(字节)
%g所属组
%n文件名
%o块大小
%r副本数
%u所有者
%y修改时间

权限管理

# 修改文件权限
hdfs dfs -chmod 755 /user/hadoop/script.sh

# 递归修改目录权限
hdfs dfs -chmod -R 755 /user/hadoop/

# 修改所有者
hdfs dfs -chown hadoop:hadoop /user/hadoop/file.txt

# 递归修改所有者
hdfs dfs -chown -R hadoop:hadoop /user/hadoop/

# 修改所属组
hdfs dfs -chgrp hadoop /user/hadoop/file.txt

副本管理

# 设置文件副本数
hdfs dfs -setrep 3 /user/hadoop/file.txt

# 递归设置目录下所有文件副本数
hdfs dfs -setrep -R 3 /user/hadoop/

# 查看文件块信息
hdfs fsck /user/hadoop/file.txt -files -blocks -locations

文件系统管理命令

查看文件系统状态

# 查看 HDFS 整体状态
hdfs dfsadmin -report

# 查看安全模式状态
hdfs dfsadmin -safemode get

# 查看文件系统统计信息
hdfs dfsadmin -metasave report.txt

配额管理

# 设置目录空间配额(字节)
hdfs dfsadmin -setSpaceQuota 1T /user/hadoop

# 设置目录文件数量配额
hdfs dfsadmin -setQuota 1000 /user/hadoop

# 清除空间配额
hdfs dfsadmin -clrSpaceQuota /user/hadoop

# 清除文件数量配额
hdfs dfsadmin -clrQuota /user/hadoop

# 查看配额使用情况
hdfs dfs -count -q /user/hadoop

快照管理

# 允许目录创建快照
hdfs dfsadmin -allowSnapshot /user/hadoop

# 禁止目录创建快照
hdfs dfsadmin -disallowSnapshot /user/hadoop

# 创建快照
hdfs dfs -createSnapshot /user/hadoop snapshot1

# 删除快照
hdfs dfs -deleteSnapshot /user/hadoop snapshot1

# 重命名快照
hdfs dfs -renameSnapshot /user/hadoop snapshot1 snapshot2

# 列出所有可快照目录
hdfs lsSnapshottableDir

数据块管理命令

查看数据块信息

# 检查文件系统健康状态
hdfs fsck /

# 检查特定文件
hdfs fsck /user/hadoop/file.txt

# 显示文件块信息
hdfs fsck /user/hadoop/file.txt -files -blocks

# 显示块位置信息
hdfs fsck /user/hadoop/file.txt -files -blocks -locations

# 查找损坏的块
hdfs fsck / -list-corruptfileblocks

# 移动损坏的块
hdfs fsck / -move

数据块操作

# 手动触发块报告
hdfs dfsadmin -triggerBlockReport datanode-host:port

# 刷新节点信息
hdfs dfsadmin -refreshNodes

# 打印块映射信息
hdfs fsck / -printTopology

常用运维命令

NameNode 管理

# 查看命名空间信息
hdfs getconf -confKey fs.defaultFS

# 查看配置信息
hdfs getconf -namenodes

# 保存命名空间(需要先进入安全模式)
hdfs dfsadmin -safemode enter
hdfs dfsadmin -saveNamespace
hdfs dfsadmin -safemode leave

# 刷新配置
hdfs dfsadmin -refreshServiceAcl

DataNode 管理

# 查看 DataNode 列表
hdfs dfsadmin -report | grep "Name:"

# 下线 DataNode
# 1. 编辑 dfs.hosts.exclude 配置文件,添加要下线的节点
# 2. 刷新节点
hdfs dfsadmin -refreshNodes

# 上线 DataNode
# 1. 编辑 dfs.hosts 配置文件,添加新节点
# 2. 刷新节点
hdfs dfsadmin -refreshNodes

回收站管理

HDFS 回收站功能默认关闭,可以在配置中开启:

<!-- 开启回收站 -->
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>

<!-- 回收站检查间隔 -->
<property>
<name>fs.trash.checkpoint.interval</name>
<value>60</value>
</property>

回收站相关命令:

# 查看回收站内容
hdfs dfs -ls /user/hadoop/.Trash/Current/

# 从回收站恢复文件
hdfs dfs -mv /user/hadoop/.Trash/Current/user/hadoop/file.txt /user/hadoop/

# 清空回收站
hdfs dfs -expunge

实用命令组合

查找文件

# 查找特定名称的文件
hdfs dfs -ls -R / | grep "filename"

# 查找大文件
hdfs dfs -du -h /user/hadoop/ | sort -hr | head -10

批量操作

# 批量删除旧文件
hdfs dfs -ls -t /user/hadoop/logs/ | tail -n +11 | awk '{print $NF}' | xargs -I {} hdfs dfs -rm {}

# 批量修改权限
hdfs dfs -ls /user/hadoop/ | grep "^d" | awk '{print $NF}' | xargs -I {} hdfs dfs -chmod 755 {}

统计分析

# 统计目录下文件数量
hdfs dfs -count /user/hadoop/

# 统计各类型文件数量
hdfs dfs -ls -R /user/hadoop/ | awk '{print $NF}' | awk -F. '{print $NF}' | sort | uniq -c

# 计算目录总大小
hdfs dfs -du -s /user/hadoop/ | awk '{print $1}'

命令速查表

命令说明
hdfs dfs -ls <path>列出目录内容
hdfs dfs -mkdir <path>创建目录
hdfs dfs -put <localsrc> <dst>上传文件
hdfs dfs -get <src> <localdst>下载文件
hdfs dfs -rm <path>删除文件
hdfs dfs -cat <file>查看文件内容
hdfs dfs -mv <src> <dst>移动文件
hdfs dfs -cp <src> <dst>复制文件
hdfs dfs -chmod <mode> <path>修改权限
hdfs dfs -chown <owner> <path>修改所有者
hdfs dfs -du <path>查看大小
hdfs dfs -setrep <rep> <path>设置副本数
hdfs dfsadmin -report查看集群状态
hdfs fsck <path>检查文件系统

小结

本章介绍了 HDFS 的常用命令操作:

  1. 文件操作:创建、删除、复制、移动文件和目录
  2. 文件内容查看:cat、head、tail 等命令
  3. 权限管理:chmod、chown、chgrp 等命令
  4. 系统管理:配额、快照、数据块管理
  5. 运维命令:NameNode、DataNode 管理

熟练掌握这些命令是使用 HDFS 的基础。在实际工作中,可以结合 Shell 脚本实现批量操作和自动化管理。