从Linux命令到Hadoop伪分布式安装:避坑实战笔记

发布时间:2026/10/17 15:52:05
从Linux命令到Hadoop伪分布式安装:避坑实战笔记
简介这是一份面向大数据初学者的实验指导文档聚焦熟悉常用Linux操作与Hadoop操作这一入门实验适合高校大数据课程、正在自学Hadoop伪分布式搭建或准备完成同类实验任务的人群使用。整包仅一个docx文件大小约289KB由作者ADEXOM整理Word格式便于阅读、编辑和按需截取。已有九百七十四人学习下载。文档先介绍Linux虚拟机安装思路推荐通过VirtualBox在Windows上安装Ubuntu 16.04或18.04系统再系统覆盖cd、ls、mkdir、rmdir、cp、mv、rm、cat、tac、more、head、tail、touch、chown、find、tar、grep等常用命令的典型场景并给出环境变量配置方法随后进入Hadoop层面包含Hadoop 3.1.3伪分布式安装、HDFS用户目录创建、文件复制与查看、WordCount实例运行验证等关键步骤。整体既可充当实验前的预习材料也可在操作时对照查漏补缺还能为后续大数据实验打下基础。1. 大数据实验的第一道门槛先过 Linux 命令这关再碰 Hadoop这份实验资源解决的是很多初学者卡在起跑线上的问题想学 Hadoop结果被 Linux 虚拟机安装、环境变量、伪分布式配置这些前置条件劝退。实验内容不复杂却把「能跑通」和「跑不起来」之间的所有环节都过了一遍——从 VirtualBox 装 Ubuntu到十几个高频 Linux 命令的逐个练习再到 Hadoop 3.1.3 的单机伪分布式部署和 WordCount 验证。我拆完这个实验资源后最大的感受是Hadoop 本身并不难难的是你心里清楚每一步在做什么。这篇笔记把整个流程按实战顺序拆开命令、参数、配置文件、踩坑记录都写在对应位置新手可以照着敲熟手可以直接跳到第 5 章看那些真正让你翻车的细节。2. 文件与目录操作从 cd 到 tar把高频命令一次练熟2.1 目录切换与查看cd、ls 的肌肉记忆实验第一部分是对 Linux 基础命令的密集训练目的是让手指记住这些命令而不是查一次用一次。先看最常用的目录切换和查看cd /usr/local # 绝对路径切换进入 /usr/local 目录 cd .. # 回到上一级目录注意 .. 和 . 的区别 cd ~ # 回到当前登录用户的主文件夹root 用户就是 /root ls -l /usr # 长格式列出 /usr 下的所有文件和目录逻辑说明cd不带参数直接回车也会回到主文件夹和cd ~等价ls -l比裸ls多输出权限、所有者、大小、修改时间后面的实验步骤里几乎都要靠这些信息来判断文件状态。参数说明ls常用组合是-laa用于显示隐藏文件因为实验里反复操作的.bashrc就是隐藏文件不加a根本看不到。这里有个新手容易忽略的点cd ..和cd ../..的区别。前者回到上一级后者回上两级。在/usr/local目录下执行cd ../..会直接落到根目录/如果你后续要操作的是/usr下的其他目录路径就会算错。我一般会让学生养成先pwd再操作的习惯pwd这条命令实验里虽然没有单独列出来但排查路径问题的时候是第一利器。2.2 新建与删除mkdir 的 -p 参数和 rmdir 的局限实验要求练习嵌套目录的创建和删除这是最容易暴露理解偏差的地方mkdir /tmp/a # 在 /tmp 下创建单层目录 a mkdir -p /tmp/a1/a2/a3/a4 # -p 参数允许一次性创建多级嵌套目录 rmdir /tmp/a # 删除空目录 a目录非空会报错 rm -rf /tmp/a1 # 递归强制删除 a1 整棵目录树逻辑说明mkdir -p是实验里明确要求掌握的参数它的作用是在目标父目录不存在时自动逐级创建不加-p遇到/tmp/a1/a2中a1不存在的情况会直接报错。rmdir只能删空目录实验里要删a1/a2/a3/a4这种嵌套结构时必须先删最内层再逐级往外删非常麻烦。参数说明rm -rf中r表示递归f表示强制这是删除非空目录的实际手段。注意rm -rf没有任何后悔药敲之前一定确认路径我见过有人把/tmp写成/后缀少敲一个字符整台虚拟机直接报废。这里还要区分rmdir和rm -r前者是专门为删除空目录设计的后者是通用删除。实验特意把两种删除都安排上本质是让你理解「目录非空时为什么 rmdir 会翻车」。我一般会提醒初学者看到rmdir报错Directory not empty不用慌换成rm -rf即可但删除前用ls看一眼目录内容是好习惯。2.3 复制、移动与删除cp、mv、rm 的权限边界接下来是文件操作的核心三件套实验场景是主文件夹下的.bashrc和新建的 test 目录cp ~/.bashrc /usr/bashrc1 # 复制 .bashrc 到 /usr 并重命名 mkdir /tmp/test cp -r /tmp/test /usr/ # 复制目录必须加 -r否则报错 mv /usr/bashrc1 /usr/test/bashrc1 # 移动文件到 test 目录下 mv /usr/test /usr/test2 # 重命名目录 rm /usr/test2/bashrc1 # 删除单个文件 rm -r /usr/test2 # 删除整个目录逻辑说明cp复制目录时如果不加-r会报omitting directory的错这是实验里最典型的报错之一。mv是移动和重命名共用一条命令目标路径存在就移动目标路径不存在且以原名字结尾就是重命名。参数说明cp -r的r和rm -r语义一致都是递归mv不需要递归参数目录整体搬移是它的默认行为。这块有个容易被忽略的细节不同用户之间的文件操作涉及权限。比如~/.bashrc属于当前登录用户但/usr目录的写权限可能只属于root。如果实验用的是普通用户身份执行cp ~/.bashrc /usr/bashrc1可能会因为/usr目录没有写权限而失败解决办法是先su root切换身份或者用sudo前缀执行。我在帮学生排查时发现很多人卡在这里不是命令敲错而是用户权限不够报错信息里通常带着Permission denied看到这几个单词第一反应是切 root。2.4 压缩、查找与检索tar、find、grep 的组合用法实验在命令练习的尾部安排了tar打包、find查找和grep字符串搜索这三个命令是后面处理 Hadoop 日志和配置文件时最常用的mkdir /test tar -zcvf /test.tar.gz /test # 打包并压缩 tar -zxvf /test.tar.gz -C /tmp # 解压到 /tmp 目录 find ~ -name .bashrc # 从主文件夹查找指定文件 grep examples ~/.bashrc # 在文件中搜索字符串逻辑说明tar -zcvf四个参数分别是zgzip 压缩、c创建归档、v显示过程、f指定文件名f后面必须紧跟归档文件名。解压时-C指定解压目标目录不加就解压到当前目录。参数说明find ~ -name .bashrc中~是搜索起点-name后面跟文件名模式区分大小写grep默认输出匹配行的完整内容-n参数可以显示行号排查配置文件时比不带行号直观得多。这三个命令在后续 Hadoop 操作里的使用频率很高。比如 Hadoop 日志文件动不动几百兆tar用来归档旧日志find用来定位core-site.xml、hdfs-site.xml的绝对路径grep用来在 XML 文件里快速找fs.defaultFS或dfs.namenode.name.dir的配置值。实验把这几个命令放在 Linux 基础部分实际上是在为后面的 Hadoop 操作铺路。3. 文本查看与环境变量cat 到 vim 的排查基本功3.1 正向、反向与分页查看cat、tac、more 的适用场景实验要求对.bashrc做多种方式的查看这个文件是 Linux 用户环境配置的核心后面配置 Java 环境变量也要改它。先看查看类命令cat ~/.bashrc # 一次性输出全部内容 tac ~/.bashrc # 从最后一行开始反向输出 more ~/.bashrc # 分页显示空格翻页q 退出逻辑说明cat适合文件内容较短、一次性看完的情况tac是cat的反向拼写行为也是反向输出实际使用频率不高但实验要求掌握它的存在more适合长文件分页查看翻页到末尾自动退出。参数说明more查看过程中按/可以搜索关键词按q退出按b回翻一页这些交互命令在排查 Hadoop 日志时很实用。实际排查中more的体验并不算好看完内容想回翻很别扭。我一般会建议直接上less它支持上下方向键自由翻页搜索高亮也更清晰。实验里没提less但你把more练熟之后less的命令交互基本是同一套逻辑属于一次学会两个工具的情况。3.2 只看头尾head 和 tail 的截取思路查看文件的头尾是日志分析的日常工作实验安排了四个组合场景head -n 20 ~/.bashrc # 查看前 20 行 head -n -50 ~/.bashrc # 查看除最后 50 行以外的全部内容 tail -n 20 ~/.bashrc # 查看最后 20 行 tail -n 50 ~/.bashrc # 查看从第 50 行开始到末尾的内容逻辑说明head -n 20和tail -n 20是对称的一个取前一个取后。关键差异在head -n -50和tail -n 50上head的负数参数表示「排除末尾多少行」tail的正数参数表示「从第几行开始」两个命令的参数含义正好互补。参数说明tail -f是另一个高频用法f表示持续跟踪文件末尾新增内容排查 Hadoop 启动日志时开着tail -f再触发一次启动能看到实时输出。这套头尾查看思路在 Hadoop 运维里几乎是每天都会用到的。Datanode 启动失败时先tail -n 100看日志末尾的异常堆栈日志被写满时head -n -200把旧内容截出来tail -f挂着观察 NameNode 格式化过程中的实时状态。实验把head和tail放在 Linux 基础训练里用意就是后续不专门教日志排查工具直接拿这两个命令顶上去。3.3 时间戳与所有者touch 和 chown 的权限操作实验里有两个容易被忽略但实际很重要的命令touch和chowntouch /tmp/hello # 创建空文件或刷新已有文件的时间戳 touch -d 5 days ago /tmp/hello # 把文件时间戳修改为 5 天前 chown root:root /tmp/hello # 修改文件所有者和所属组 ls -l /tmp/hello # 查看修改后的文件属性和时间逻辑说明touch有两层用法文件不存在时创建空文件文件存在时更新访问时间和修改时间。-d参数可以直接指定一个日期字符串实验里的5 days ago是相对时间的写法。chown语法是chown 用户名:组名 文件路径修改后ls -l输出里的第一列会从原来的hadoop hadoop变成root root。参数说明chown通常需要 root 权限普通用户改自己文件的所有者会报Operation not permitted实验环境下如果落在这个错上加sudo或切 root 执行。这块和 Hadoop 的关联在于Hadoop 的 HDFS 目录权限和 Linux 文件权限是两套体系但 HDFS 默认会映射 Linux 用户信息。chown练不熟后面调整 HDFS 文件所有者时还得回来翻命令。我一般会让学员实际操作一次chown后再改回来把两个方向的命令都敲一遍记忆会更牢。3.4 环境变量配置vim 编辑 ~/.bashrc 的完整路径实验要求在~/.bashrc里配置 Java 环境变量这是整个 Linux 命令训练通往 Hadoop 安装的桥梁。完整流程如下vim ~/.bashrc # 打开用户环境配置文件 # 在文件末尾追加以下内容 export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export PATH$PATH:$JAVA_HOME/bin export HADOOP_HOME/usr/local/hadoop export PATH$PATH:$HADOOP_HOME/bin source ~/.bashrc # 重新加载配置立即生效 echo $JAVA_HOME # 验证环境变量是否写入成功逻辑说明vim打开文件后按i进入插入模式编辑完按Esc退出插入模式输入:wq保存并退出。source命令的作用是让当前 shell 重新读取配置文件不开新终端也能生效。echo $JAVA_HOME如果输出路径说明配置成功如果输出空行说明变量名拼写有误或没有加载。参数说明export PATH$PATH:$JAVA_HOME/bin这种写法是在原有PATH基础上追加新路径冒号是路径分隔符漏掉$PATH会导致系统命令都找不到。这里有个版本匹配问题值得注意。Hadoop 3.1.3 对 Java 版本有硬性要求Java 8 是官方推荐的版本Java 11 也能跑但会有警告输出。实验资源里虽然只写了配置 Java 环境变量没指定具体版本但根据 Hadoop 3.1.3 的官方支持范围Java 8 最稳妥。检查 Java 是否已安装用java -version没装的话先apt install openjdk-8-jdk再回来配环境变量顺序反了容易白配。4. Hadoop 伪分布式安装从解压到 WordCount 跑通的完整路径4.1 前置条件与版本选择JDK、SSH、下载源Hadoop 伪分布式安装的前置条件比想象中多实验资源默认你已经有 Ubuntu 虚拟机但实际动手前还需要确认三件事java -version # 确认 JDK 版本1.8 最佳 ssh localhost # 确认 SSH 服务可用并已配置免密登录 # 如果免密未配置执行以下步骤 ssh-keygen -t rsa -P -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys逻辑说明ssh-keygen生成 RSA 密钥对-P 表示空密码-f指定密钥文件路径。生成的公钥追加到authorized_keys后ssh localhost就不再需要输入密码Hadoop 的各个守护进程之间靠 SSH 通信这一步不配好后面会连环报错。参数说明chmod 600把公钥文件权限收紧到仅所有者读写权限过宽会导致 SSH 拒绝使用该密钥。JDK 和 SSH 都确认没问题后再下载 Hadoop 安装包。实验资源指定的是hadoop-3.1.3.tar.gz下载后解压到/usr/local/hadoopsudo tar -zxvf hadoop-3.1.3.tar.gz -C /usr/local sudo mv /usr/local/hadoop-3.1.3 /usr/local/hadoop sudo chown -R $USER:$USER /usr/local/hadoop逻辑说明解压后目录名带版本号mv重命名为hadoop后后续配置路径可以少写一串版本字符。chown -R把整个 Hadoop 目录的所有者改为当前用户这一步很关键——Hadoop 在运行过程中会在安装目录下写临时文件如果目录属于 root普通用户的 hadoop 身份去启动守护进程时会遇到权限问题。我一般建议专门创建一个hadoop用户来运行伪分布式集群和实验资源里「使用 hadoop 用户登录 Linux 系统」的要求正好对上。4.2 配置文件修改core-site.xml 与 hdfs-site.xml 的参数Hadoop 伪分布式的核心配置在两个 XML 文件里位于/usr/local/hadoop/etc/hadoop/目录下。常见做法是先配置core-site.xml指定 NameNode 地址再配置hdfs-site.xml指定数据块副本数和 NameNode 数据目录!-- core-site.xml -- configuration property namefs.defaultFS/name valuehdfs://localhost:9000/value /property property namehadoop.tmp.dir/name value/opt/module/hadoop-3.1.3/data/value /property /configuration!-- hdfs-site.xml -- configuration property namedfs.replication/name value1/value /property property namedfs.namenode.name.dir/name value/opt/module/hadoop-3.1.3/data/namenode/value /property property namedfs.datanode.data.dir/name value/opt/module/hadoop-3.1.3/data/datanode/value /property /configuration逻辑说明fs.defaultFS指定文件系统的访问入口伪分布式下指向localhost:9000。dfs.replication副本数必须设置为 1因为伪分布式只有一台节点默认 3 个副本会导致 DataNode 启动时报错找不到足够的存储位置。hadoop.tmp.dir的作用是定义 Hadoop 运行时数据的根目录实验资源里core-site.xml指定的缓存数据路径就在这个配置项里第 5 章的那个经典踩坑案例就是从这个目录下手解决的。配置 HDFS 相关参数时dfs.namenode.name.dir和dfs.datanode.data.dir可以单独指定它们决定 NameNode 的元数据和 DataNode 数据块的落地位置。如果这两个配置不写Hadoop 会默认落到系统临时目录重启后数据可能丢失。实验资源里没有单独强调这两个参数但排查 Datanode 启动失败时data目录就是战场。4.3 启动验证start-dfs.sh 与 jps 的结果解读配置文件就绪后首次启动前必须先格式化 NameNodehdfs namenode -format格式化成功后会输出successfully formatted字样。然后启动 HDFS 守护进程start-dfs.sh jps逻辑说明jps是 JDK 自带的 Java 进程查看工具输出里逐个列出当前运行的 Java 进程。一个正常的伪分布式集群jps应该能看到 5 个进程NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager。如果只看到 4 个或更少缺失的进程名就是排查的起点。参数说明start-dfs.sh实际启动的是 NameNode、DataNode 和 SecondaryNameNode 三个进程ResourceManager和NodeManager属于 YARN 组件需要单独执行start-yarn.sh启动。实验要求的 WordCount 运行不依赖 YARN用 MapReduce 的本地模式也能跑所以jps里只要看到 NameNode 和 DataNode 都在核心部分就算通过了。4.4 WordCount 运行验证确认伪分布式真的能跑实验要求运行 Hadoop 自带的 WordCount 实例来验证集群状态。完整流程是先本地创建样例文件上传到 HDFS再调用 WordCount 执行统计最后查看结果mkdir -p ~/wordcount_input echo hello hadoop hello world ~/wordcount_input/file1.txt echo hadoop bigdata linux hadoop ~/wordcount_input/file2.txt hdfs dfs -mkdir -p /user/hadoop/input hdfs dfs -put ~/wordcount_input/* /user/hadoop/input/ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar \ wordcount /user/hadoop/input /user/hadoop/output hdfs dfs -cat /user/hadoop/output/part-r-00000逻辑说明前两条命令创建本地输入文件并写入测试内容第三条和第四条把文件上传到 HDFS 指定目录。hadoop jar调用的是 Hadoop 自带的示例 JAR 包wordcount是其中的一个可执行类输入路径和输出路径都必须是 HDFS 上的路径。输出路径不能预先存在否则运行会报错这是 WordCount 的一个使用限制。最后一条命令查看统计结果正常输出会按单词分组并计数。这里给出 WordCount 的进阶用法如果本地模式下不想走 HDFS可以在mapred-site.xml里配置mapreduce.framework.name为local然后直接传本地文件路径运行。但实验的核心目的是验证伪分布式集群所以按 HDFS 路径跑一遍是必要的。5. 避坑排查Datanode 起不来、Live Nodes 为 0 的典型现场5.1 Datanode 无法启动Cluster-Id 不一致的完整复盘现象启动 HDFS 后执行jpsNameNode 和 SecondaryNameNode 都在但 Datanode 进程始终不出现。访问 NameNode 的 Web 界面9870端口Live Nodes数量显示为 0。查看 Datanode 日志报错信息中包含类似Cluster ID mismatch或Incompatible clusterIDs的关键字。原因这是伪分布式安装里最典型的翻车现场。安装过程中反复执行了多次hadoop namenode -format每次格式化都会生成一个新的clusterID写在 NameNode 的元数据目录current/VERSION文件里。Datanode 首次启动时会读取datanode目录中保存的clusterID如果它记录的 ID 和 NameNode 当前使用的 ID 不一致就会拒绝注册并退出。格式化次数越多两个 ID 错位的概率越大。解决核心思路是让 NameNode 和 DataNode 使用同一个clusterID最彻底的办法是把上次格式化留下的数据全部清掉从零开始。具体操作如下# 1. 找到 core-site.xml 中 hadoop.tmp.dir 指定的路径 grep hadoop.tmp.dir /usr/local/hadoop/etc/hadoop/core-site.xml # 结果通常是 /opt/module/hadoop-3.1.3/data # 2. 删除整个数据目录 rm -rf /opt/module/hadoop-3.1.3/data # 3. 重新格式化 NameNode hdfs namenode -format # 4. 重启 HDFS stop-all.sh start-all.sh # 5. 验证进程和节点状态 jps逻辑说明删除数据目录会把 NameNode 的元数据和 Datanode 的数据块索引全部清空相当于抹掉以往所有格式化的痕迹。重新格式化后生成的clusterID就是全新的Datanode 首次启动时会把新 ID 写入自己的数据目录两边就能对齐了。参数说明stop-all.sh和start-all.sh是 HDFS 和 YARN 的联合启停脚本比单独执行start-dfs.sh和start-yarn.sh更省事。注意第 5 步的jps结果如果出现 5 个进程才算真正恢复。5.2 Live Nodes 为 0 的排查顺序现象9870端口能打开但 Web 界面显示Live Nodes为 0。jps里 Datanode 的进程在只是网页上注册不了。原因能打开9870说明 NameNode 存活但 Datanode 进程存在不等于它成功注册到 NameNode。注册失败的最常见原因是clusterID不一致或网络端口被防火墙拦截。解决按顺序排查从进程、日志、端口、配置文件四层推进jps # 第 1 层确认 5 个进程都在 tail -n 100 /usr/local/hadoop/logs/hadoop-hadoop-datanode-*.log # 第 2 层日志是最直接的证据 ss -tlnp | grep -E 9870|9000|9864 # 第 3 层确认端口是不是真的在监听 cat /usr/local/hadoop/data/current/VERSION # 第 4 层检查 clusterID 是否一致逻辑说明日志文件会明确写出 Datanode 注册失败的原因常见的三种是clusterID不匹配、dfs.datanode.data.dir目录权限不足、dfs.namenode.http-address配置指向了错误的端口。ss -tlnp用于确认 NameNode 的9000端口和 Datanode 通信端口9864是否处于监听状态。VERSION 文件里的clusterID需要和 NameNode 侧的数据目录中记录的比对不一致就回到 5.1 的重置思路。5.3 SSH 免密失败导致启动中断现象start-dfs.sh执行过程中反复提示输入密码或直接报错Permission denied (publickey)集群启动流程被中断。原因Hadoop 守护进程之间通过 SSH 协议通信如果当前用户没有配置到本机的免密登录脚本在尝试连接localhost时就会卡在认证环节。实验环境如果是新装的 UbuntuSSH 服务可能默认未安装。解决先确认 SSH 服务已安装并启动再配置免密sudo apt install openssh-server service ssh status ssh-keygen -t rsa -P -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys ssh localhost # 验证免密是否生效参数说明ssh-keygen的-P 是空密码参数不加这个参数会交互式询问两次密码脚本化执行容易被卡住。测试免密是否生效的标准动作是ssh localhost后直接返回提示符而不是出现密码输入界面。5.4 9870 端口打不开与防火墙问题现象NameNode 启动正常jps显示进程存活但在宿主机浏览器里访问虚拟机 IP 的9870端口一直转圈或拒绝连接。原因Ubuntu 默认防火墙ufw可能没有放行9870端口或者虚拟机的网络模式设置导致宿主机无法直接访问。VirtualBox 默认的 NAT 模式下宿主机访问虚拟机需要端口转发容易漏配。解决优先切换网络模式为桥接然后放行端口sudo ufw allow 9870/tcp sudo ufw status # 如果输出显示 status: active说明放行规则已生效逻辑说明桥接模式下虚拟机直接获取局域网 IP宿主机可以像访问普通设备一样访问虚拟机的 9870 端口省去 NAT 端口转发的配置。如果不想切桥接也可以在 VirtualBox 的网络设置里添加一条端口转发规则把宿主机的 9870 转发到虚拟机的 9870。我一般建议直接桥接伪分布式实验的网络需求不高桥接最省心。6. HDFS 常用操作的验证清单一条命令链确认集群没白装实验的最后一部分是 HDFS 的常用操作包括创建用户目录、新建文件夹、上传本地文件、复制回本地。这四步操作串起来就是一条完整的验证链路适合全部跑完后用来做最终检查# 1. 建立 HDFS 用户目录 hdfs dfs -mkdir -p /user/hadoop # 2. 在用户目录下创建 test 文件夹 hdfs dfs -mkdir /user/hadoop/test # 3. 把本地 .bashrc 上传到 HDFS test 目录 hdfs dfs -put ~/.bashrc /user/hadoop/test/ # 4. 查看 test 目录内容确认上传成功 hdfs dfs -ls /user/hadoop/test # 5. 把 HDFS 上的文件复制回本地 hdfs dfs -get /user/hadoop/test/.bashrc /usr/local/hadoop/这套命令链里最值得留意的是-put和-get的方向。很多人第一次用时容易把路径顺序搞反-put是本地在前 HDFS 在后-get是 HDFS 在前本地在后。另外-get复制回来的文件名如果和本地的.bashrc重名会直接覆盖实验资源里特意提到复制到/usr/local/hadoop目录下就是为了避免和主文件夹的原文件冲突。一个进阶验证技巧是加-du和-stat查看 HDFS 文件的实际大小和副本状态hdfs dfs -du -h /user/hadoop/test hdfs dfs -stat %b %o /user/hadoop/test/.bashrc参数说明-du -h输出文件大小h参数以人类可读格式显示-stat %b %o中的%b是文件大小%o是副本数伪分布式下副本数应为 1。执行完这条还能看到元数据状态可以作为集群健康度的一个辅助证明。这个实验资源整体走下来我从拆解到复现花了大半天时间。最大的教训就是格式化 NameNode 前一定要想清楚后果——我中途有一次就是多敲了一次hadoop namenode -format把clusterID打乱Datanode 直接罢工最后不得不删掉整个 data 目录重新来过。从那以后我每次在伪分布式环境里做格式化都会提前确认一下core-site.xml里的hadoop.tmp.dir路径再顺手执行一遍jps和ss -tlnp把进程和端口状态固定下来再动手。这套检查习惯虽然多花两分钟但省掉的排查时间远不止这些。希望这篇笔记能帮你在踩坑之前就把这一步跨过去。本文还有配套的精品资源点击获取