首先欢迎各位来到我的博客很高兴能够在这里和您见面希望您在这里不仅可以有所收获同时也能感受到一份轻松欢乐的氛围祝你生活愉快如有需要请大家订阅我的专栏【大数据系列】哟我会定期更新相关系列的文章关注关注请关注请大家关注下博主您的支持是我不断创作的最大动力文章目录引言一、命令使用前须知1.1 两种命令风格1.2 命令通用格式1.3 获取帮助1.4 环境准备示例二、核心命令分类总览三、上传命令将数据写入HDFS3.1 put从本地复制到HDFS3.2 copyFromLocalput的别名3.3 moveFromLocal上传后删除本地源3.4 appendToFile追加内容到已有文件3.5 上传命令对比四、下载命令从HDFS读取数据4.1 get从HDFS复制到本地4.2 copyToLocalget的别名4.3 getmerge合并下载4.4 text查看文本内容支持压缩五、删除命令清理无用数据5.1 rm删除文件或目录5.2 rmdir删除空目录5.3 expunge清空回收站六、权限设置命令安全管控6.1 chmod修改权限6.2 chown修改所有者6.3 chgrp修改所属组6.4 高级权限ACL访问控制列表6.5 权限相关查看命令七、常用辅助命令7.1 目录与文件操作7.2 磁盘与统计7.3 文件校验与查找八、实战场景综合案例场景一数据ETL全流程场景二多用户协作共享目录场景三定期维护脚本场景四数据迁移九、常见错误与排障十、命令速查表十一、总结引言在Hadoop生态中HDFS是存储基石。无论你是数据开发、运维还是架构师熟练掌握HDFS命令行操作都是必备技能。本文将系统讲解HDFS的常用命令涵盖上传、下载、删除、权限设置等核心操作每个命令都配有实战案例和代码示例让你看完就能上手。一、命令使用前须知1.1 两种命令风格Hadoop提供了两套命令功能完全一致任选其一即可命令前缀特点hadoop fs通用文件系统命令可操作任何Hadoop支持的文件系统HDFS、本地文件等hdfs dfsHDFS专用命令仅操作HDFS性能略优本文统一使用hdfs dfs风格。1.2 命令通用格式hdfs dfs -命令[选项][参数]1.3 获取帮助# 查看所有命令hdfs dfs# 查看具体命令用法hdfs dfs-helpput hdfs dfs-usagels1.4 环境准备示例在开始之前确保HDFS集群正常运行单节点或分布式均可并创建一个测试目录# 查看HDFS状态hdfs dfsadmin-report# 创建测试根目录hdfs dfs-mkdir-p/test/data hdfs dfs-mkdir/test/upload hdfs dfs-mkdir/test/download二、核心命令分类总览类别常用命令上传put, copyFromLocal, moveFromLocal, appendToFile下载get, copyToLocal, getmerge, text删除rm, rmdir, expunge权限chmod, chown, chgrp, setfacl, getfacl目录/文件操作ls, mkdir, touchz, cp, mv, du, df, stat查看内容cat, head, tailHDFS管理fsck, balancer, dfsadmin三、上传命令将数据写入HDFS3.1 put从本地复制到HDFS最常用的上传命令将本地文件或目录复制到HDFS。# 基本语法hdfs dfs-put本地源路径HDFS目标路径# 上传单个文件hdfs dfs-put/home/user/logs/access.log /test/data/# 上传多个文件hdfs dfs-putfile1.txt file2.txt /test/data/# 上传整个目录hdfs dfs-put/home/user/logs/ /test/upload/# 覆盖已存在的文件使用-fhdfs dfs-put-f/home/user/config.xml /test/data/config.xml# 显示上传进度使用-vhdfs dfs-put-vlargefile.dat /test/upload/实际案例批量上传日志文件# 生成测试文件echo2025-01-01 10:00:00 ERROR/tmp/error.logecho2025-01-01 10:00:01 INFO/tmp/info.logecho2025-01-01 10:00:02 WARN/tmp/warn.log# 批量上传hdfs dfs-put/tmp/*.log /test/logs/# 验证上传结果hdfs dfs-ls/test/logs/3.2 copyFromLocalput的别名用法与put完全相同只是名字更具描述性。hdfs dfs-copyFromLocal/etc/hosts /test/data/hosts_backup3.3 moveFromLocal上传后删除本地源上传后自动删除本地源文件相当于“剪切”操作。hdfs dfs-moveFromLocal/tmp/temp_data.csv /test/upload/# 查看本地文件是否还在应该不存在ls/tmp/temp_data.csv3.4 appendToFile追加内容到已有文件将本地文件内容追加到HDFS已有文件末尾。# 准备追加内容echonew line content/tmp/append.txt# 追加到HDFS文件hdfs dfs-appendToFile/tmp/append.txt /test/data/access.log# 查看追加结果hdfs dfs-cat/test/data/access.log3.5 上传命令对比命令本地源文件是否保留支持目录覆盖控制put是是-f 参数copyFromLocal是是-f 参数moveFromLocal否是无appendToFile是仅文件否追加模式四、下载命令从HDFS读取数据4.1 get从HDFS复制到本地最常用的下载命令将HDFS文件或目录复制到本地文件系统。# 基本语法hdfs dfs-getHDFS源路径本地目标路径# 下载单个文件hdfs dfs-get/test/data/access.log /home/user/# 下载时重命名hdfs dfs-get/test/data/access.log /home/user/log_backup.log# 下载目录递归hdfs dfs-get/test/logs /home/user/local_logs/# 忽略校验和错误-ignoreCrchdfs dfs-get-ignoreCrc/corrupted/file /tmp/recovery/# 下载多个文件hdfs dfs-get/test/data/file1.txt /test/data/file2.txt /home/user/实际案例下载并保留原属性# -p 参数保留原文件的权限、时间戳等属性hdfs dfs-get-p/test/data/important.dat /backup/# 查看本地文件属性ls-l/backup/important.dat4.2 copyToLocalget的别名与get功能完全相同。hdfs dfs-copyToLocal/test/data/access.log /tmp/4.3 getmerge合并下载将HDFS目录下的多个文件合并成一个本地文件下载非常适合日志聚合场景。# 基本语法hdfs dfs-getmergeHDFS目录路径本地目标文件# 合并目录下所有文件hdfs dfs-getmerge/test/logs /tmp/all_logs.txt# 合并时在每个文件内容前加上文件名-nlhdfs dfs-getmerge-nl/test/logs /tmp/logs_with_filenames.txt# 跳过空文件-skip-emptyhdfs dfs-getmerge-skip-empty /test/logs /tmp/non_empty.txt实际案例合并分区日志# 假设HDFS上按日期分区的日志# /logs/dt2025-01-01/part-0000# /logs/dt2025-01-01/part-0001# /logs/dt2025-01-02/part-0000# 合并2025-01-01的所有日志hdfs dfs-getmerge/logs/dt2025-01-01 /tmp/2025-01-01.log# 合并所有日期的日志带文件名标记hdfs dfs-getmerge-nl/logs /tmp/all_logs_tagged.log4.4 text查看文本内容支持压缩text命令可以查看HDFS文件内容并且自动解压压缩文件如.gz、.bz2等。# 查看普通文本文件hdfs dfs-text/test/data/access.log# 查看gzip压缩文件hdfs dfs-text/test/data/access.log.gz# 只查看前10行hdfs dfs-text/test/data/access.log.gz|head-10# 统计行数hdfs dfs-text/test/data/access.log.gz|wc-l五、删除命令清理无用数据5.1 rm删除文件或目录# 基本语法hdfs dfs-rmHDFS路径# 删除单个文件hdfs dfs-rm/test/data/temp.txt# 删除目录需要 -r 递归hdfs dfs-rm-r/test/old_data/# 删除多个文件支持通配符hdfs dfs-rm/test/logs/error*.log# 跳过回收站-skipTrash直接永久删除hdfs dfs-rm-skipTrash/test/critical/temp.dat# 显示删除详情-verbosehdfs dfs-rm-r-verbose/test/backup/实际案例清理7天前的旧数据# 使用通配符删除旧分区hdfs dfs-rm-r/logs/dt2025-01-0[1-7]/5.2 rmdir删除空目录只能删除空目录非空目录会报错更安全。# 删除空目录hdfs dfs-rmdir/test/empty_folder# 删除多个空目录hdfs dfs-rmdir/test/dir1 /test/dir2# 尝试删除非空目录会失败hdfs dfs-rmdir/test/logs# 报错: Directory is not empty5.3 expunge清空回收站HDFS默认将删除的文件移入回收站/user/用户名/.Trashexpunge命令可永久清空回收站。# 清空当前用户的回收站hdfs dfs-expunge# 查看回收站内容相当于Linux的lshdfs dfs-ls/user/$(whoami)/.Trash/Current/# 手动从回收站恢复文件hdfs dfs-mv/user/hadoop/.Trash/Current/test/important.txt /test/⚠️注意回收站功能需要配置启用默认在core-site.xml中设置fs.trash.interval单位分钟。六、权限设置命令安全管控HDFS的权限模型与Linux/POSIX类似采用**用户(u) 组(g) 其他(o)**的三层权限每个文件/目录有读®、写(w)、执行(x)权限。符号数字权限对目录的含义r4读列出目录内容w2写创建/删除子文件或子目录x1执行访问目录下的子项6.1 chmod修改权限# 基本语法与Linux chmod一致hdfs dfs-chmod权限HDFS路径# 数字方式755 rwxr-xr-xhdfs dfs-chmod755/test/data# 符号方式urwx,grx,orxhdfs dfs-chmodurwx,grx,orx /test/data# 递归修改目录下所有文件-Rhdfs dfs-chmod-R750/test/important/# 去掉其他用户的写权限hdfs dfs-chmodo-w /test/shared/# 设置粘滞位只有文件所有者才能删除hdfs dfs-chmod1777/tmp实际案例为部门共享目录设置权限# 创建部门共享目录hdfs dfs-mkdir/data/sales# 设置权限所有者读写执行组读写其他无权限hdfs dfs-chmod770/data/sales# 验证hdfs dfs-ls-d/data/sales6.2 chown修改所有者# 基本语法hdfs dfs-chown新所有者HDFS路径# 修改文件所有者为hdfs用户hdfs dfs-chownhdfs /test/data/access.log# 同时修改所有者和所属组用冒号分隔hdfs dfs-chownhdfs:hadoop /test/data/# 递归修改-Rhdfs dfs-chown-Rhive:hive /user/hive/warehouse/# 仅修改组用冒号后面为空hdfs dfs-chown:hadoop /test/shared/6.3 chgrp修改所属组# 基本语法hdfs dfs-chgrp新组名HDFS路径# 修改文件所属组hdfs dfs-chgrphadoop /test/data/access.log# 递归修改hdfs dfs-chgrp-Ranalytics /data/reports/6.4 高级权限ACL访问控制列表当基础权限不够用时ACL可以为特定用户或组设置更细粒度的权限。# 启用ACL功能需在hdfs-site.xml配置# propertynamedfs.namenode.acls.enabled/namevaluetrue/value/property# 查看ACLhdfs dfs-getfacl/test/secure/# 设置ACL给用户alice读写权限hdfs dfs-setfacl-muser:alice:rw- /test/secure/# 设置ACL给组qa读权限hdfs dfs-setfacl-mgroup:qa:r-- /test/secure/# 删除特定用户的ACL条目hdfs dfs-setfacl-xuser:alice /test/secure/# 删除所有ACL恢复基础权限hdfs dfs-setfacl-b/test/secure/ACL实战案例多团队协作目录# 创建项目目录hdfs dfs-mkdir/project/x# 基础权限所有者root完全控制组project读写其他人无hdfs dfs-chmod770/project/x hdfs dfs-chownroot:project /project/x# 给外包团队的特定用户只读权限hdfs dfs-setfacl-muser:vendor1:r-- /project/x# 给审计组特殊写入权限hdfs dfs-setfacl-mgroup:audit:rwx /project/x# 查看最终权限hdfs dfs-getfacl/project/x6.5 权限相关查看命令# 查看文件详细信息包含权限、所有者等hdfs dfs-ls-h/test/data/# 输出示例-rw-r--r-- 3 hadoop supergroup 128M 2025-01-15 10:00 /test/data/file.bin# 查看目录摘要信息hdfs dfs-ls-d/test/data/# 统计目录下文件数量、大小、权限汇总hdfs dfs-count/test/data/七、常用辅助命令7.1 目录与文件操作# 创建目录-p 自动创建父目录hdfs dfs-mkdir-p/user/hadoop/input/2025/01# 创建空文件hdfs dfs-touchz/test/empty_file.txt# 复制文件hdfs dfs-cp/test/source.txt /test/dest/# 移动/重命名文件hdfs dfs-mv/test/old_name.txt /test/new_name.txt# 查看文件最后1KB字节hdfs dfs-tail/test/logs/access.log# 查看文件前几行通过管道hdfs dfs-cat/test/logs/access.log|head-207.2 磁盘与统计# 查看HDFS总容量、已用、可用hdfs dfs-df-h/# 查看目录实际占用空间hdfs dfs-du-h/test/data/# 按大小排序显示需要辅助命令hdfs dfs-du/test/|sort-rn# 汇总目录总大小hdfs dfs-du-s-h/test/data/# 查看文件/目录的元数据修改时间、块信息等hdfs dfs-stat%n - %b bytes, modified %y/test/data/file.txt7.3 文件校验与查找# 计算文件的MD5值hdfs dfs-checksum/test/data/file.txt# 查找符合条件的文件使用通配符hdfs dfs-find/test/logs-name*.log# 查找超过7天的文件需要结合shellhdfs dfs-ls-R/test/logs|grep-E2025-01-0[1-7]|awk{print $8}八、实战场景综合案例场景一数据ETL全流程假设我们需要从本地采集日志上传到HDFS清理旧数据然后下载分析结果。# 1. 准备本地数据ls-lh/data/raw/*.csv# 2. 创建HDFS日期分区目录hdfs dfs-mkdir-p/staging/orders/dt2025-01-15# 3. 上传数据带进度hdfs dfs-put-v/data/raw/orders_20250115.csv /staging/orders/dt2025-01-15/# 4. 删除7天前的旧分区hdfs dfs-rm-r/staging/orders/dt2025-01-08/# 5. 确认数据已上传hdfs dfs-ls-R/staging/orders/# 6. 假设经过Spark等处理后结果在HDFS的/output目录# 将结果合并下载到本地hdfs dfs-getmerge-nl/output/result /home/analyst/result.txt# 7. 清理临时文件hdfs dfs-rm-r/staging/orders/dt2025-01-15/_temporary场景二多用户协作共享目录# 1. 创建团队共享目录hdfs dfs-mkdir/share/analytics# 2. 设置权限团队读写其他人无权限hdfs dfs-chmod770/share/analytics hdfs dfs-chownroot:analytics /share/analytics# 3. 添加特殊用户只读hdfs dfs-setfacl-muser:data_audit:r-x /share/analytics# 4. 创建子目录并单独设置权限hdfs dfs-mkdir/share/analytics/restricted hdfs dfs-chmod700/share/analytics/restricted hdfs dfs-chownanalytic_lead:analytics /share/analytics/restricted# 5. 验证权限hdfs dfs-ls-ld/share/analytics hdfs dfs-getfacl/share/analytics场景三定期维护脚本#!/bin/bash# hdfs_maintenance.sh - HDFS日常维护脚本# 设置变量BACKUP_DIR/backup/dailyLOG_FILE/var/log/hdfs_cleanup.logecho$(date)- Starting HDFS maintenance$LOG_FILE# 1. 清理超过30天的临时数据hdfs dfs-rm-r-skipTrash/tmp/hive_*2$LOG_FILE# 2. 清空回收站hdfs dfs-expunge2$LOG_FILE# 3. 检查欠副本块UNDER_REP$(hdfsfsck/|grepUnder replicated blocks|awk{print $4})echo$(date)- Under replicated blocks:$UNDER_REP$LOG_FILE# 4. 检查磁盘使用率hdfs dfs-df-h/$LOG_FILE# 5. 运行均衡器若差异超过10%hdfs balancer-threshold102$LOG_FILEecho$(date)- Maintenance completed$LOG_FILE场景四数据迁移# 在HDFS内部移动数据hdfs dfs-mv/staging/old_data /archive/2024/# 跨集群复制使用distcphadoop distcp hdfs://source-cluster:8020/data/orders\hdfs://target-cluster:8020/backup/orders# 压缩并归档旧数据创建Hadoop归档文件hadoop archive-archiveNamelogs_2024.har-p/logs/2024 /archives/九、常见错误与排障错误信息常见原因解决方案Permission denied权限不足检查当前用户权限使用chmod/chown修改或切换到有权限的用户File already exists目标文件已存在使用-f参数覆盖或先删除再上传No such file or directory路径不存在检查路径拼写使用ls确认父目录存在Could only be replicated to 0 nodes无可用DataNode检查DataNode是否启动磁盘是否满Name node is in safe modeNameNode处于安全模式等待自动退出或强制hdfs dfsadmin -safemode leaveOperation not permitted操作不允许如删除非空目录需加-r移动跨文件系统需用-p等Checksum mismatch数据损坏用-ignoreCrc尝试恢复或从其他副本重新复制十、命令速查表操作命令示例查看文件列表hdfs dfs -ls /path创建目录hdfs dfs -mkdir -p /path上传文件hdfs dfs -put local.txt /hdfs/下载文件hdfs dfs -get /hdfs/file.txt local/删除文件hdfs dfs -rm /hdfs/file删除目录hdfs dfs -rm -r /hdfs/dir重命名hdfs dfs -mv /old /new复制hdfs dfs -cp /src /dst查看内容hdfs dfs -cat /hdfs/file修改权限hdfs dfs -chmod 755 /hdfs/file修改所有者hdfs dfs -chown user:group /hdfs/file查看磁盘用量hdfs dfs -du -h /path查看集群容量hdfs dfs -df -h /设置副本数hdfs dfs -setrep 3 /path测试文件存在hdfs dfs -test -e /path echo exists统计目录信息hdfs dfs -count /path合并下载hdfs dfs -getmerge /hdfs/dir /local/merged.txt清空回收站hdfs dfs -expunge十一、总结HDFS命令行是操作大数据存储的基本功。本文涵盖了从基础的put/get到进阶的-setfacl、-getmerge等命令每个都配有实际案例。掌握这些命令后你将能够高效管理数据批量上传、下载、合并处理TB级文件保障数据安全精细的权限控制和ACL满足企业合规要求自动化运维结合shell脚本实现日常清理、监控和告警排查故障快速定位权限、空间、副本等问题记住熟练使用命令行是成为Hadoop专家的第一步。建议你在自己的测试集群上亲自敲一遍这些命令遇到问题多查看-help日积月累必有所成。你在生产环境中遇到过哪些HDFS命令引发的问题比如误删数据、权限配置错误等。欢迎在评论区分享你的经验让更多人避坑❤️❤️❤️觉得有用的话点个赞 呗。❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧