2026年9月9日
HDFS Shell 命令总结
一、前言
掌握HDFS底层原理后,Shell命令是日常运维、开发测试最常用的操作方式。HDFS Shell支持文件上传、下载、权限修改、副本配置、文件统计、目录管理等全场景操作,语法简洁、贴近Linux命令,上手难度极低。
二、基础语法说明
HDFS 提供两套等效命令,日常使用可随意替换,生产中更推荐 hdfs dfs:
hadoop fs 具体命令 = hdfs dfs 具体命令
通用帮助命令:可查看所有命令参数用法
hadoop fs -help rm
三、环境前置准备
执行所有命令前,需启动Hadoop集群,保证服务正常运行:
# 启动HDFS集群
sbin/start-dfs.sh
# 启动YARN集群
sbin/start-yarn.sh
四、文件上传操作(本地 → HDFS)
1、-moveFromLocal 本地剪切上传
将本地文件剪切至HDFS,上传后本地文件消失
# 创建本地测试文件
vim xiaobaic.txt
# 文件内容:xiaobaic
# 剪切上传至HDFS /bigdata目录
hadoop fs -moveFromLocal xiaobaic.txt /bigdata
2、-copyFromLocal 本地复制上传
复制本地文件至HDFS,本地文件保留
vim xiaobaij.txt
# 文件内容:xiaobaij
hadoop fs -copyFromLocal xiaobaij.txt /bigdata
3、-put 通用上传(生产首选)
功能等同于copyFromLocal,语法更通用,生产环境高频使用
vim xiaobaiw.txt
# 文件内容:xiaobaiw
hadoop fs -put xiaobaiw.txt /bigdata
4、-appendToFile 文件追加
向HDFS已有文件末尾追加内容,不覆盖原数据
vim xiaobaicjw.txt
# 文件内容:xiaobaicjw
hadoop fs -appendToFile xiaobaicjw.txt /bigdata/xiaobaic.txt
五、文件下载操作(HDFS → 本地)
1、-copyToLocal HDFS复制到本地
hadoop fs -copyToLocal /bigdata/xiaobaic.txt /opt/module/hadoop-3.1.3/
2、-get 通用下载
功能等同于copyToLocal,支持重命名下载,使用更灵活
hadoop fs -get /bigdata/xiaobaic.txt /opt/module/hadoop-3.1.3/xiaobaic2.txt
六、HDFS 内部常用操作命令
# 1、ls 查看目录文件信息
hadoop fs -ls /bigdata/
# 2、cat 查看文件完整内容
hadoop fs -cat /bigdata/xiaobaic.txt
# 3、chmod 修改文件权限(用法同Linux)
hadoop fs -chmod 666 /bigdata/xiaobaic.txt
# 4、mkdir 创建目录
hadoop fs -mkdir /student
# 5、cp HDFS内部文件复制
hadoop fs -cp /bigdata/xiaobaic.txt /student
# 6、mv HDFS内部文件移动/重命名
hadoop fs -mv /bigdata/xiaobaij.txt /student
# 7、tail 查看文件末尾1KB数据(适配日志查看)
hadoop fs -tail /bigdata/xiaobaic.txt
# 8、rm 删除单个文件
hadoop fs -rm /bigdata/xiaobaic.txt
# 9、rm -r 递归删除目录及所有内容
hadoop fs -rm -r /bigdata
七、高阶运维命令
1、-du 统计文件/目录大小
-s:汇总统计;-h:人性化单位显示
# 汇总查看目录总大小
hadoop fs -du -s -h /student
# 明细查看目录下文件大小
hadoop fs -du -h /student
参数解析:输出第一列是文件原始大小,第二列是所有副本总占用空间(默认3副本,即为原始大小×3)。
2、-setrep 修改文件副本数
hadoop fs -setrep 10 /student/xiaobaic.txt
重点避坑:该命令仅修改NameNode元数据中的副本记录,实际副本数量由集群DataNode节点数决定。若集群仅有3个DN节点,最多仅能生成3个副本,节点扩容后才会自动补齐副本。
八、实操核心总结与底层原理
1、日常开发上传优先用 put 、下载优先用 get,是生产通用规范;
2、剪切命令 moveFromLocal 会删除本地源文件,操作前需确认数据是否需要保留;
3、权限、目录创建、副本修改等操作仅与NameNode交互,属于元数据操作,无数据传输;
4、文件上传下载底层完全遵循HDFS读写流程,先请求NameNode获取节点信息,再与DataNode完成数据传输;
5、HDFS不支持文件随机修改,仅支持追加写入,这也是大数据场景数据增量更新的核心方式。