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 的常用命令操作:
- 文件操作:创建、删除、复制、移动文件和目录
- 文件内容查看:cat、head、tail 等命令
- 权限管理:chmod、chown、chgrp 等命令
- 系统管理:配额、快照、数据块管理
- 运维命令:NameNode、DataNode 管理
熟练掌握这些命令是使用 HDFS 的基础。在实际工作中,可以结合 Shell 脚本实现批量操作和自动化管理。