Hadoop伪分布式环境搭建与Linux命令实操指南
发布时间:2026/10/22 17:00:27 锦皓数字建站

简介面向大数据课程入门学习者这份实验一文档围绕“熟悉Linux与Hadoop操作”展开重点覆盖Linux虚拟机安装、常用Shell命令及Hadoop 3.1.3伪分布式环境搭建适合在Windows下借助VirtualBox完成配套实验的读者。文档先说明实验目的与平台选择再以命令实操形式演示cd、ls、mkdir、rmdir、cp、mv、rm、cat、tac、more、head、tail、grep、tar等用法并在Hadoop部分给出伪分布式安装、WordCount验证及HDFS常用Shell操作要点。资源包共1个docx文件整体约289KB内容组织从环境准备到命令练习再到Hadoop部署层次清晰便于边看边操作。目前已有977人学习下载可作为课前预习、课上对照和课后复习的参考材料也为后续大数据实验奠定扎实基础。1. 熟悉 Linux 操作和 Hadoop 操作大数据实验的第一道门槛很多同学以为大数据实验的第一关是写 MapReduce 代码真正卡人的其实是环境Windows 上跑不出 Hadoop 的最佳性能Linux 命令不熟连解压安装都费劲伪分布式起不来后面全是空谈。这个实验就是把三件事一次性解决——装 Linux 虚拟机、练熟常用 Linux 命令、把 Hadoop 伪分布式环境跑通。它适合手头只有一台普通电脑、没有现成集群的初学者也适合想在动手写代码之前把 HDFS 基本操作补一遍的从业者。整个实验不涉及高深理论却是后续所有大数据实验的地基值得花半天时间从头到尾敲一遍。2. Linux 命令实操从 cd 到 tar 的常用命令与易错点这一章的命令量最大也是后面操作 Hadoop 的前置技能。很多新手在装好虚拟机后第一件事就是瞎敲敲错了几条命令就误以为自己环境没装好。实际上这 17 组命令只需要分四类去记目录切换、内容查看、文件管理、压缩查找每一类记住两三个高频参数就够了不用背。2.1 目录操作cd、ls、mkdir、rmdir实验要求先掌握目录切换下面这组命令正好对应实验手册里 14 步cd /usr/local cd .. cd ~ ls -al /usr cd /tmp mkdir a mkdir -p a1/a2/a3/a4 rmdir a rmdir -p a1/a2/a3/a4 ls /tmpcd 不带参数直接敲会回到当前用户的主文件夹cd .. 是回到上一级目录cd ~ 也可以回到主文件夹三者等价。ls 加上 -al 能显示隐藏文件和权限信息这是排查问题最常用的组合后面看 Hadoop 目录权限时还会用到。mkdir 和 rmdir 是这一节最容易翻车的地方。mkdir 默认只能创建单层目录直接 mkdir a1/a2/a3/a4 会报错提示没有那个文件或目录必须加 -p 才能递归创建多级目录。rmdir 只能删除空目录非空的目录它会明确提示目录不为空。这里用 rmdir -p 删除多级空目录删除完后用 ls /tmp 确认结果顺便检验刚才的创建操作是否成功。2.2 文件内容查看cat、tac、more、head、tail查看文件内容是 Linux 下最频繁的操作实验要求用五种命令看同一个 ~/.bashrc目的不是背命令而是让读者理解它们各自的适用场景。cat ~/.bashrc tac ~/.bashrc more ~/.bashrc head -n 20 ~/.bashrc head -n -50 ~/.bashrc tail -n 20 ~/.bashrc tail -n 50 ~/.bashrccat 适合小文件一次性输出全部内容tac 是 cat 的反向拼写把每一行倒序输出注意它是行倒序不是字符倒序文本行内部的字符顺序不变。more 适合长文件一页一页往下翻空格翻页、q 退出但它只能往下翻不能回翻所以后来 more 慢慢被 less 取代。head 和 tail 是取文件片段的利器。head -n 20 显示前 20 行head -n -50 表示从开头显示到倒数第 50 行之前也就是不显示最后 50 行。tail -n 20 显示最后 20 行tail -n 50 表示从第 50 行开始显示到文件末尾。这两个命令在排错时特别有用比如看 Hadoop 日志通常先 tail -n 100 抓最后一段报错再 head -n 20 看一眼启动参数配合起来定位问题比直接打开整个日志高效得多。2.3 文件与目录管理cp、mv、rm、touch、chown、find这一节是文件操作的核心也是后面安装 Hadoop 时天天要用的命令。cp ~/.bashrc /usr/bashrc1 cd /tmp mkdir test cp -r /tmp/test /usr/ mv /usr/bashrc1 /usr/test/ mv /usr/test /usr/test2 rm /usr/test2/bashrc1 rm -r /usr/test2 touch /tmp/hello ls -l /tmp/hello touch -d 5 days ago /tmp/hello ls -l /tmp/hello sudo chown root /tmp/hello ls -l /tmp/hello find ~ -name .bashrccp 复制目录必须加 -r否则报错提示省略目录这是新手最常见的报错之一后面复制 Hadoop 配置文件时同样适用。mv 既能移动也能改名mv 文件 目录是移动mv 旧名 新名是改名实验里先把 bashrc1 移进 test 目录再把 test 改名为 test2一次演示了两种用法。rm 删除文件不需要参数删除目录要加 -r也就是递归删除。我先删文件再删目录避免出现目录非空删不掉的提示。touch 的主要作用是创建空文件ls -l 能看到时间戳touch -d 5 days ago 直接把文件时间改成 5 天前这是模拟日志时间时常用的技巧。chown 修改文件属主需要 root 权限所以这里加了 sudo执行后属主从普通用户变成 root。find 的写法是 find 起始路径 -name 文件名注意主文件夹下的隐藏文件也能被找出来找出 .bashrc 后马上就能做下一节的内容查看。2.4 压缩、查找与环境变量tar、grep 与 JAVA_HOME 配置最后这组命令会直接用在后面的 Hadoop 安装上尤其是 tar 打包和解压。sudo mkdir /test cd / sudo tar -zcvf test.tar.gz test sudo tar -zxvf test.tar.gz -C /tmp grep examples ~/.bashrc vim ~/.bashrctar 的 -z 表示 gzip 压缩、-c 是打包、-v 显示过程、-f 指定文件名所以 -zcvf 是打包并压缩成 tar.gz解压时用 -x 替换 -c-C /tmp 指定解压到 /tmp 目录不写 -C 就解压到当前目录。后面 Hadoop 安装包也是同一套命令把文件名换掉就能用。grep 从文件里搜索字符串基本格式是 grep 关键词 文件路径配合管道可以过滤命令输出这在看日志时天天用。接下来的环境变量配置是这一章的收尾也是最重要的部分vim ~/.bashrc export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export PATH$PATH:$JAVA_HOME/bin source ~/.bashrc echo $JAVA_HOME用 vim 打开 ~/.bashrc在最底部追加两行。JAVA_HOME 的路径取决于 JDK 实际安装位置可以先执行 update-alternatives --list java 或 whereis java 确认前缀路径再填进去照抄别人的路径很可能对不上。改完后必须 source ~/.bashrc 让配置立即生效否则要重新登录终端。echo $JAVA_HOME 验证变量值能打印出路径说明配置成功。这一节里 PATH$PATH:$JAVA_HOME/bin 的意思是保留原有 PATH 再追加新目录顺序不能写反。后面 Hadoop 的环境变量也是同样的套路只是把 JAVA_HOME 换成 HADOOP_HOME理解了这一行后面就顺理成章。3. Hadoop 伪分布式安装单机模拟集群的原理与配置流程3.1 为什么选伪分布式一个进程一个守护进程很多读者没有真实集群不等于学不了 Hadoop。伪分布式的本质是在一台 Linux 机器上同时跑起 NameNode、DataNode、SecondaryNameNode 三个守护进程每个进程各管各的事从外部看就是一个微缩版集群。这种模式最大的价值在于进程边界和真实集群完全一致。NameNode 管理元数据、DataNode 存数据块、SecondaryNameNode 辅助合并编辑日志这些职责在伪分布式里一个不少。所以实验手册把 3.1.3 固化成标准版本因为 3.x 之后 HDFS 的 Web 端口从旧的 50070 换成了 9870很多网上教程还在写旧端口照抄容易踩坑。3.2 安装前准备JDK、解压与环境变量Hadoop 是 Java 写的第一步必须先有 JDK装完后用 java -version 确认版本无误再继续下面操作。java -version sudo tar -zxf hadoop-3.1.3.tar.gz -C /usr/local sudo mv /usr/local/hadoop-3.1.3 /usr/local/hadoop sudo chown -R 当前用户名 /usr/local/hadooptar 解压到 /usr/local 后目录名是 hadoop-3.1.3统一改成 hadoop后面所有配置路径都好写不用每次都带版本号。chown 把整个安装目录的所有权给当前用户因为 Hadoop 必须以普通用户运行用 root 跑会出现权限相关的奇怪问题。解压完成后编辑 ~/.bashrc追加 Hadoop 的环境变量export HADOOP_HOME/usr/local/hadoop export PATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export HADOOP_CONF_DIR$HADOOP_HOME/etc/hadoop source ~/.bashrc hadoop versionHADOOP_HOME 是安装根目录PATH 里加上 bin 和 sbin 是为了能直接敲 hdfs、start-dfs.sh 这类命令不用写全路径。hadoop version 能打印版本号说明环境变量生效。这里和上一章的 JAVA_HOME 是同一套路理解了一个另一个就通了。3.3 修改配置文件core-site.xml 与 hdfs-site.xml 的关键参数Hadoop 的配置文件在 /usr/local/hadoop/etc/hadoop 目录下伪分布式只需要改两个文件。第一个是 core-site.xml!-- 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 /configurationfs.defaultFS 指定 HDFS 的访问入口伪分布式用 hdfs://localhost:9000 就够了改成机器名反而容易引发后面的主机名解析问题。hadoop.tmp.dir 是数据目录NameNode 的元数据、DataNode 的数据块都放在这个路径下。这个路径是后面踩坑的关键先记下来。第二个是 hdfs-site.xml!-- hdfs-site.xml -- configuration property namedfs.replication/name value1/value /property /configurationdfs.replication 是副本数。真实集群默认是 3因为数据分散在多台机器上。伪分布式只有一台 DataNode如果不改成 1每个数据块要复制三份机器会一直做副本复制文件状态长期显示 under-replicated磁盘压力也不小。3.4 免密登录、格式化与启动验证启动 HDFS 之前还差两步SSH 免密登录和 NameNode 格式化。ssh-keygen -t rsa -P -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys ssh localhost伪分布式里 NameNode 会用 SSH 协议去启动本机的 DataNode如果每次都要求输密码start-dfs.sh 会卡在密码输入上。三行命令生成密钥、把公钥追加进 authorized_keys、收紧权限最后 ssh localhost 验证一下能直接登录进去就说明免密配置生效。格式化是初始化元数据目录命令是hdfs namenode -format start-dfs.sh jpsstart-dfs.sh 启动三个进程jps 用来列出当前 Java 进程。正常情况下能看到 NameNode、DataNode、SecondaryNameNode 三个名字一个不多一个不少。jps 输出里缺任何一个都说明启动有问题先去看对应日志而不是重复格式化——这个经验在第五章展开讲。4. 常用的 Hadoop 操作HDFS 目录创建、上传与复制4.1 启动 Hadoop 并创建用户目录HDFS 启动后接下来练习用 hdfs dfs 这套命令操作分布式文件系统。实验的第一步是给 hadoop 用户创建专属目录。su hadoop start-dfs.sh hdfs dfs -mkdir -p /user/hadoop hdfs dfs -ls /有了 -p 参数mkdir 会自动创建路径上缺失的父目录这个习惯在 HDFS 里同样实用。创建完后 ls / 会看到 user 目录。注意 HDFS 的目录操作和上一章 Linux 命令长得很像但两者完全不同——ls 看的是分布式文件系统不是本地磁盘这也是实验把这两部分前后衔接的原因。4.2 上传文件到 HDFSput 与查看本地文件进 HDFS 用 put 命令这是整个实验里最核心的 HDFS 写操作。实验要求在 /user/hadoop 下建 test 目录然后把 ~/.bashrc 传进去。hdfs dfs -mkdir /user/hadoop/test hdfs dfs -put ~/.bashrc /user/hadoop/test/ hdfs dfs -ls /user/hadoop/testput 的用法是 put 本地路径 HDFS路径目标路径要写到目录级别文件会自动保留原文件名。ls 确认上传结果能看到文件大小和副本数。如果文件状态显示 under-replicated多半是上一章那个 dfs.replication 没改成 1 的后遗症别急着删文件先把配置改过来再重新上传。4.3 从 HDFS 取回数据get 与常用命令表反向操作是用 get 把 HDFS 上的数据拿回本地这一步验证数据流向是双向的。hdfs dfs -get /user/hadoop/test /usr/local/hadoop/ ls -l /usr/local/hadoop/testget 会复制整个 test 目录到本地路径下包括里面上传的 .bashrc。这里容易搞混的是参数顺序get 后面第一个参数是 HDFS 路径第二个是本地路径和 put 正好相反两行命令对照着记才不会弄反。下面这张表是后续实验里最常用的一组 HDFS 命令建议保存下来随时对照命令作用hdfs dfs -ls /path查看目录列表hdfs dfs -mkdir -p /path递归创建目录hdfs dfs -put 本地文件 hdfs路径上传文件到 HDFShdfs dfs -get hdfs路径 本地路径从 HDFS 下载到本地hdfs dfs -cat /path/file查看文件内容hdfs dfs -rm -r /path递归删除目录hdfs dfs -cp 源路径 目标路径HDFS 内部复制这些命令和 Linux 原生命令的用法高度相似但底层完全不同操作对象是 HDFS 上的数据块。实际跑实验时把这张表贴在编辑器旁边对照敲比死记快很多。命令写错了也不用慌HDFS 的报错信息通常会把路径不存在或文件已存在讲得很清楚看提示改就行。5. 避坑Datanode 无法启动等五个高频故障这一章写的是实验里最容易卡住的五个问题前两个和进程起不来有关后三个看起来是状态异常根因其实都在配置上。5.1 LiveNode 为 0、Datanode 起不来clusterId 不一致现象访问 9870 端口页面显示 LiveNode 数量为 0jps 输出里只有 NameNode、SecondaryNameNode、ResourceManager 等四五个进程唯独少了 DataNode。原因这是整个实验里最常见的翻车。安装过程中每多跑一次 hdfs namenode -formatNameNode 就会生成一个新的 clusterId 并写进它的元数据而 DataNode 本地记录的 clusterId 还是旧的启动时发现两边对不上直接拒绝注册表现为进程消失。解决在 core-site.xml 找到 hadoop.tmp.dir 配置的路径删除整个数据目录然后重新格式化、重启集群。如果之前用的是 /opt/module/hadoop-3.1.3/data就执行rm -rf /opt/module/hadoop-3.1.3/data hdfs namenode -format stop-all.sh start-all.sh删除后 NameNode 和 DataNode 的 clusterId 会重新一致jps 里就能看到 DataNodeLiveNode 变回 1。注意 stop-all.sh 和 start-all.sh 的顺序不能反格式化前先停集群否则会有进程占用端口导致格式化失败。5.2 start-dfs.sh 反复要求输密码SSH 免密未配置现象start-dfs.sh 执行到一半停下来提示输入密码输完一次又提示一次脚本始终走不完。原因NameNode 通过 SSH 启动本机 DataNode没有配置免密登录系统就会打断脚本交互。这个坑在换过用户后格外容易出现因为 SSH 配置是按用户隔离的谁执行 start-dfs.sh 就需要谁的密钥配置在别的用户下不生效。解决用执行 Hadoop 命令的同一用户生成密钥并放入 authorized_keys配置好后先 ssh localhost 验证能免密进入再跑 start-dfs.sh。不要图省事配置 root 的免密然后用 root 启动后面文件属主会乱。5.3 文件显示 under-replicated伪分布式副本数没改现象put 文件后ls 显示文件已上传但 Web 页面上文件一直处于 under-replicated 状态过很久也不消失日志里不断报副本复制失败。原因dfs.replication 保持默认的 3而伪分布式只有一台 DataNode块副本永远凑不齐三份NameNode 一直等待复制文件就一直处于副本不足的状态。解决把 hdfs-site.xml 里的 dfs.replication 改成 1重启 HDFS再重新 put 文件。已经存在的文件可以不管新建文件生效即可。这个现象不影响单机实验的运行但看起来像故障容易让人反复折腾早点改配置能省很多时间。5.4 9870 页面打不开或卡住主机名解析问题现象jps 显示进程全在本地 curl 也能通但浏览器访问 9870 端口迟迟加载不出页面或者访问后页面里主机名显示成奇怪的短名。原因部分教程把 fs.defaultFS 配成了机器名而不是 localhost浏览器解析不了内网机器名或者 /etc/hosts 里没有对应条目。NameNode 启动时把机器名写进了元数据Web 页面按这个名字跳转浏览器自然进不去。解决最简单的方式是配置里统一用 localhost访问时也用 http://localhost:9870。如果要配机器名需要在 /etc/hosts 加上一行 IP 和机器名的映射两边的写法保持一致否则就会出现 NameNode 自己能访问、浏览器进不去的情况。5.5 格式化不是后悔药数据目录的连锁反应现象格式化后重启集群发现 HDFS 上之前 put 的文件全没了甚至 NameNode 起不来日志提示目录已存在或权限异常。原因格式化本质是清空元数据并重建不是无损重置。NameNode 格式化会清空 hadoop.tmp.dir 下的 name 子目录所有 HDFS 上的文件记录一并消失同时又不会主动删除 data 子目录导致 DataNode 的旧数据块和新的元数据对不上。解决如果需要彻底重置按 5.1 的方式删除整个数据目录再格式化。如果只是想重启集群应该用 stop-all.sh 加 start-all.sh不要顺手就 format。这个教训可以记成一句话格式化不是后悔药它会把实验成果一起清掉动手前先想清楚是真的需要重置还是只是重启。6. 跑通 WordCount 验证集群从进程检查到输出核对装好 Hadoop 只看进程还不够真正能证明集群可用的是跑一个可执行作业。实验手册里最后一步是运行自带 WordCount 实例这也是我判断一套环境能不能用的标准动作。验证分三步第一步先确认进程和端口jps hdfs dfsadmin -reportjps 期望看到 NameNode、DataNode、SecondaryNameNodedfsadmin -report 能看到 LiveNode 为 1 和集群总容量。这两条过了只能说明 HDFS 活着MapReduce 计算链路还没验证。第二步跑 WordCount。3.1.3 的示例 jar 在安装目录的 share/hadoop/mapreduce 下hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar \ wordcount /user/hadoop/test /user/hadoop/wordcount_output输入目录用前面已经 put 进去的 /user/hadoop/test输出目录必须是不存在的路径Job 会自己创建如果目录已经存在会直接报错。运行过程中能看到 map 100% 和 reduce 100%这两个进度出现就说明 MapReduce 链路通了。第三步核对结果用 cat 看输出文件hdfs dfs -cat /user/hadoop/wordcount_output/part-r-00000输出里每一行是单词和出现次数的组合看到这个结果就说明 NameNode、DataNode、MapReduce 整条链路全通。从那以后我每次搭完环境都强制走一遍这个流程jps 看进程、dfsadmin -report 看 LiveNode、跑一次 WordCount 看输出三分钟就能把环境问题暴露干净。这个习惯帮我省掉了无数个作业跑了半天才发现集群压根没起来的夜晚希望帮到你。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。