HDFS(Hadoop Distributed File System)提供了丰富的Shell命令来管理分布式文件系统。这些命令与Linux Shell命令风格相似,非常易于上手。
下面我将分类介绍最常用和最重要的HDFS操作命令。
一、核心命令语法格式
几乎所有HDFS Shell命令都遵循以下格式:
hadoop fs -<command> [<args>]
# 或者(新版本中更推荐)
hdfs dfs -<command> [<args>]
hadoop fs 是一个通用接口,可以操作多种文件系统,而 hdfs dfs 是专门针对HDFS的。在纯HDFS环境中,两者可以互换,但通常使用 hdfs dfs。
二、常用操作命令详解
1. 文件管理(上传、下载、复制、移动、删除)
| 操作 | 命令 | 示例 | 说明 |
|---|---|---|---|
| 上传文件 (本地 -> HDFS) | -put 或 -copyFromLocal | hdfs dfs -put localfile.txt /user/hadoop/ | 将本地文件上传到HDFS指定目录 |
| 上传并验证 | -put -f | hdfs dfs -put -f localfile.txt /user/hadoop/ | -f 选项表示如果目标文件已存在则覆盖 |
| 下载文件 (HDFS -> 本地) | -get 或 -copyToLocal | hdfs dfs -get /user/hadoop/hdfsfile.txt . | 将HDFS文件下载到本地当前目录 |
| 合并下载 | -getmerge | hdfs dfs -getmerge /user/hadoop/logs/* merged-log.txt | 将HDFS上一个目录下的所有文件合并后下载到本地一个文件中 |
| 查看文件内容 | -cat | hdfs dfs -cat /user/hadoop/file.txt | 查看HDFS上文件的内容(适合小文件) |
| 逐页查看 | -text | hdfs dfs -text /user/hadoop/file.txt | more | 查看文件内容(支持压缩格式),并用more分页 |
| 复制 (HDFS内部) | -cp | hdfs dfs -cp /path/source /path/dest | 在HDFS内部复制文件或目录 |
| 移动/重命名 | -mv | hdfs dfs -mv /path/oldname /path/newname | 在HDFS内部移动文件或目录,也可用于重命名 |
| 删除文件 | -rm | hdfs dfs -rm /user/hadoop/file.txt | 删除文件 |
| 递归删除目录 | -rm -r | hdfs dfs -rm -r /user/hadoop/old_dir/ | 递归删除目录及目录下的所有文件,非常常用 |
| 安全删除 (到垃圾箱) | -rm -r -skipTrash | hdfs dfs -rm -r -skipTrash /tmp/to_delete | 默认会移到垃圾箱(.Trash目录),-skipTrash会直接跳过垃圾箱永久删除,慎用! |
2. 目录与列表操作
| 操作 | 命令 | 示例 | 说明 |
|---|---|---|---|
| 列出目录内容 | -ls | hdfs dfs -ls /user/hadoop | 列出指定目录下的文件和子目录 |
| 递归列出 | -ls -R | hdfs dfs -ls -R /user/hadoop | 递归列出目录及其所有子目录的内容 |
| 创建目录 | -mkdir | hdfs dfs -mkdir /user/hadoop/new_dir | 创建目录 |
| 递归创建父目录 | -mkdir -p | hdfs dfs -mkdir -p /user/hadoop/parent/child | 连同父目录一起创建,如果不存在的话 |
| 删除空目录 | -rmdir | hdfs dfs -rmdir /user/hadoop/empty_dir | 只能删除空目录 |
3. 文件系统管理与信息查看
| 操作 | 命令 | 示例 | 说明 |
|---|---|---|---|
| 查看磁盘使用情况 | -du | hdfs dfs -du -h /user/hadoop | 查看目录/文件的大小,-h 选项以人类可读格式(K, M, G)显示 |
| 查看总空间 | -df -h | hdfs dfs -df -h | 查看HDFS文件系统的总容量和剩余空间,类似于Linux的df命令 |
| 统计文件/目录数量 | -count | hdfs dfs -count /user/hadoop | 输出:目录数量、文件数量、总大小(字节)、路径 |
| 查看文件尾部 | -tail | hdfs dfs -tail -f /user/hadoop/log.txt | 查看文件末尾1KB的内容,-f 选项可以动态追踪文件末尾(类似tail -f) |
| 修改副本数 | -setrep | hdfs dfs -setrep -w 3 /user/hadoop/file.txt | 修改文件的副本数量(例如改为3个),-w选项会等待副本数调整完成 |
4. 权限与所有者管理
| 操作 | 命令 | 示例 | 说明 |
|---|---|---|---|
| 修改所属组 | -chgrp | hdfs dfs -chgrp hadoop /user/hadoop/file.txt | 修改文件/目录的所属组 |
| 修改权限 | -chmod | hdfs dfs -chmod 755 /user/hadoop/file.txt | 修改文件/目录的权限(755代表rwxr-xr-x) |
| 修改所有者 | -chown | hdfs dfs -chown hdfs:hadoop /user/hadoop/file.txt | 修改文件/目录的所有者和组(格式:user:group) |
三、实用命令组合与技巧
-
管道操作:HDFS命令可以和Linux命令结合使用。
# 查找HDFS上最近一天修改过的文件 hdfs dfs -ls -R /data/logs | grep "^d" | awk '{print $6" "$7" "$8}' | while read line; do if [ $(date -d "$line" +%s) -gt $(date -d "1 day ago" +%s) ]; then echo "$line"; fi; done # 统计HDFS上某个目录下各文件的大小并排序 hdfs dfs -du /data/logs | sort -n -r -
通配符:支持
*和?等通配符。# 列出所有以.log结尾的文件 hdfs dfs -ls /data/*.log # 下载2023年所有日志文件(假设文件名包含日期) hdfs dfs -get /data/logs/*2023* ./
四、注意事项
- 路径格式:HDFS路径是绝对路径,以
/开头。 - 权限:操作HDFS需要相应的权限,很多操作(如创建目录)可能在默认的
/user/$USER目录下才有权限。 - 数据平衡:如果上传了大量数据,集群数据可能不均衡,可以使用
hdfs balancer命令来平衡数据分布(通常由管理员执行)。 - Web UI:除了命令行,还可以通过HDFS的Web界面(通常是
http://<namenode-host>:9870)来直观地浏览文件系统、查看节点状态等。
掌握以上命令,你就能完成HDFS中90%的日常文件操作任务了。对于更高级的管理任务,如快照、配额等,则需要查阅更详细的官方文档。
HDFS常用操作命令详解
1842

被折叠的 条评论
为什么被折叠?



