
简介本资源是面向大数据初学者的入门级实验指导文档适用于高校计算机、数据科学相关专业学生及转行学习者旨在解决Linux环境搭建与Hadoop基础操作能力缺失的问题。文档系统覆盖三大核心环节Windows平台下VirtualBox虚拟机安装及Ubuntu 18.04/16.04部署、20余条高频Linux命令cd/ls/mkdir/rm/cat/tac/tar/grep等的实操示例与验证要求、Hadoop 3.1.3伪分布式环境的全流程配置及WordCount实例运行验证。资源为单个289KB的DOCX文件内容结构清晰含实验目的、平台要求、分步操作指令、命令参数说明及关键截图提示便于边学边练。目前已有980人学习下载可作为课程实验预习材料、自学打卡手册或教师备课参考帮助读者扎实建立大数据开发环境认知与动手能力。1. 这不是“装个虚拟机就完事”的实验Linux Hadoop 伪分布式环境是大数据实操的最小可信单元你可能已经点开过十份“Hadoop 安装教程”最后卡在jps不显示 DataNode、hdfs dfs -ls /报错 connection refused、或者server:9870页面上 Live Nodes 永远是 0——这不是你手速慢而是缺了一块关键拼图把 Linux 命令、系统级配置、Hadoop 内部状态三者拧成一股绳的闭环验证能力。本实验表面是“熟悉常用命令”实则是构建一个可诊断、可回滚、可复现的大数据最小运行单元Ubuntu 虚拟机非 WSL Hadoop 3.1.3 伪分布式非单机模式 全流程 Shell 操作链。它不教你怎么配集群但教会你当start-dfs.sh启动后只有 NameNode 和 SecondaryNameNode 在跑时第一眼该看哪三个日志、第二步该比对哪两个 UUID、第三步该删哪条路径下的哪个隐藏文件。适合正在啃《大数据技术原理与应用》类教材、用 VMware/VirtualBox 搭环境、被“格式化一次就崩一次”折磨到怀疑人生的初学者也适合想快速捡起 Hadoop 实操手感、需要一份带血泪排错路径的工程师。这不是理论铺垫是开机、敲命令、看日志、改配置、再验证的完整工作流。2. 虚拟机与系统基线为什么必须用 Ubuntu 18.04 而非 22.04以及 VirtualBox 的三个硬性配置项Hadoop 3.1.3 的编译和运行依赖特定版本的 glibc、OpenSSL 和 Java 运行时 ABI 兼容性。Ubuntu 22.04 默认搭载 glibc 2.35而 Hadoop 3.1.3 编译时链接的是 glibc 2.27Ubuntu 18.04 标准库直接在 22.04 上运行会出现undefined symbol: __cxa_thread_atexit_impl类链接错误——这不是 Java 版本问题是 C 库二进制不兼容。这是选型的第一道硬门槛。2.1 VirtualBox 必须启用的三项底层设置很多翻车始于虚拟机本身没调对。以下配置必须在创建虚拟机前或关机状态下修改开机状态下修改无效提示VirtualBox 设置 → 系统 → 加速选项卡 → 勾选「启用嵌套分页」和「启用 VT-x/AMD-V」网络 → 网卡1 → 连接方式选「桥接网卡」而非「NAT」。桥接模式让虚拟机获得独立 IP避免 Hadoop 各进程间通信因 NAT 地址转换失败。# 验证虚拟机是否真正启用了硬件加速执行后应返回 VT-x is enabled $ grep -E (vmx|svm) /proc/cpuinfo若无输出说明 BIOS 中 Intel VT-x 或 AMD-V 未开启需重启进 BIOS 手动打开不同主板按键不同常见为 F2/F10/Del。这是后续start-dfs.sh启动失败却查不到原因的高频黑匣子。2.2 Ubuntu 18.04 最小化安装后的四步加固不要用桌面版 ISO 直接装——图形界面会占用内存、引入 systemd 冲突、且默认禁用 root 登录而 Hadoop 伪分布式要求hadoop用户对/usr/local/hadoop有完全控制权。必须用 Server 版 ISOubuntu-18.04.6-live-server-amd64.iso安装时勾选「Install OpenSSH server」其余全取消。安装完成后立即执行# 1. 创建 hadoop 专用用户禁止 shell 登录符合生产安全习惯 $ sudo adduser --disabled-password --gecos hadoop $ sudo adduser hadoop sudo # 加入 sudo 组方便调试 # 2. 关闭 swapHadoop 官方强制要求否则 YARN 会拒绝启动 $ sudo swapoff -a $ echo # swap disabled for Hadoop | sudo tee -a /etc/fstab $ sudo sed -i /swap/d /etc/fstab # 彻底注释 swap 行 # 3. 配置 hostsHadoop 依赖 hostname 解析localhost 不够用 $ echo 127.0.0.1 $(hostname) | sudo tee -a /etc/hosts # 验证ping $(hostname) 应返回 127.0.0.1 # 4. 安装并固定 OpenJDK 8Hadoop 3.1.3 兼容性最佳 $ sudo apt update sudo apt install -y openjdk-8-jdk-headless $ sudo update-alternatives --config java # 手动选择 java-1.8.0-openjdk-amd64update-alternatives是关键Ubuntu 18.04 默认可能装了多个 JDKjava -version显示的版本未必是JAVA_HOME指向的版本。必须用此命令强制绑定否则hadoop version会报Unsupported Java version。2.3 SSH 免密登录不是“配了就行”而是“必须用 hadoop 用户配”伪分布式本质是让一台机器模拟多节点NameNode、DataNode、ResourceManager 等进程需通过 SSH 无密码启动自身。很多人用root或ubuntu用户配 SSH结果start-dfs.sh报Permission denied (publickey)。# 切换到 hadoop 用户注意su - hadoop带短横确保加载 .bashrc $ su - hadoop $ ssh-keygen -t rsa -P -f ~/.ssh/id_rsa $ cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys $ chmod 0600 ~/.ssh/authorized_keys # 验证必须从 hadoop 用户下执行且目标是本机 hostname $ ssh $(hostname) -o StrictHostKeyCheckingno echo success # 输出 success 即成功。若提示输入密码说明 authorized_keys 权限不对或 sshd 配置未生效。chmod 0600是铁律OpenSSH 严格校验authorized_keys权限755 或 644 会直接拒绝认证。这是新手最常忽略的玄学坑。3. Linux 命令实战链从cd到tar每条命令都绑定 Hadoop 环境初始化上下文本节不罗列命令手册而是构建一条真实工作流用 Linux 命令为 Hadoop 准备干净的家、安放二进制包、解压、建立符号链接、配置环境变量。所有操作均以hadoop用户身份在/home/hadoop下完成路径可追溯、权限可审计。3.1 目录结构即架构为什么/usr/local/hadoop是唯一合法路径Hadoop 官方文档明确要求安装路径不含空格、中文、特殊字符且需由运行用户完全控制。/usr/local/hadoop是社区约定俗成的路径因为/usr/local是 Unix 系统存放第三方软件的标准位置hadoop子目录名与用户同名避免混淆后续配置文件中HADOOP_HOME变量将直接引用此路径。# 创建目录并授予权限必须用 hadoop 用户执行 $ mkdir -p /usr/local/hadoop $ sudo chown -R hadoop:hadoop /usr/local/hadoop $ ls -ld /usr/local/hadoop # 输出应为drwxr-xr-x 2 hadoop hadoop 4096 ... /usr/local/hadoopchown -R中的-R不是可选Hadoop 启动时会在该目录下自动生成logs/、data/、pid/等子目录若父目录权限不对子目录创建失败导致进程静默退出。3.2tar命令的两个致命参数-C和--strip-components下载hadoop-3.1.3.tar.gz后解压位置和目录层级决定后续配置复杂度。错误做法tar -zxvf hadoop-3.1.3.tar.gz→ 生成hadoop-3.1.3/目录 → 再mv hadoop-3.1.3 /usr/local/hadoop。正确做法一步到位# 进入下载目录假设在 ~/Downloads $ cd ~/Downloads # 解压到 /usr/local/ 并自动去掉顶层目录--strip-components1 $ sudo tar -zxvf hadoop-3.1.3.tar.gz -C /usr/local/ --strip-components1 # 验证/usr/local/hadoop 下应直接出现 bin/、etc/、lib/ 等目录而非嵌套在 hadoop-3.1.3/ 内 $ ls /usr/local/hadoop | head -5 # 输出bin etc include lib libexec LICENSE.txt NOTICE.txt README.txt sbin share--strip-components1参数删除压缩包内顶层目录名避免路径冗余。若漏掉HADOOP_HOME就得写成/usr/local/hadoop-3.1.3一旦升级版本就得全局替换配置违背运维原则。3.3 环境变量配置.bashrc里三行代码的执行顺序陷阱很多教程教你在~/.bashrc末尾追加export JAVA_HOME...但忽略了.bashrc的加载时机仅对交互式非登录 shell 生效。而start-dfs.sh内部调用hadoop-daemon.sh时启动的是非交互式 shell不会 source.bashrc导致JAVA_HOME为空。# 正确做法在 ~/.bashrc 中添加注意 export 顺序 export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export HADOOP_HOME/usr/local/hadoop export PATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin # 然后必须让所有子 shell 都能继承——重写 /etc/environment系统级 $ echo JAVA_HOME\/usr/lib/jvm/java-8-openjdk-amd64\ | sudo tee -a /etc/environment $ echo HADOOP_HOME\/usr/local/hadoop\ | sudo tee -a /etc/environment/etc/environment是 PAM 模块读取的系统级环境变量文件所有进程包括非交互式 shell启动时都会加载。这是绕过.bashrc加载限制的工业级方案。3.4findgrep组合技快速定位配置文件中的硬编码路径当 Hadoop 启动失败日志里报Cannot create directory /opt/module/hadoop-3.1.3/data而你根本没配过/opt/module——说明某处配置文件残留了旧路径。手动翻core-site.xml太慢用命令链秒杀# 在 HADOOP_HOME 下搜索所有含 opt/module 的文件-l 只显示文件名-n 显示行号 $ grep -rl opt/module /usr/local/hadoop/etc/hadoop/ # 输出/usr/local/hadoop/etc/hadoop/core-site.xml # 查看具体哪一行-n 显示行号-A1 显示匹配行后1行 $ grep -n -A1 opt/module /usr/local/hadoop/etc/hadoop/core-site.xml # 输出12: value/opt/module/hadoop-3.1.3/data/value-r递归、-l列文件、-n标行号、-A显示上下文四参数组合是排查配置污染的后悔药。4. Hadoop 伪分布式安装namenode -format 不是万能钥匙而是 UUID 锁定器伪分布式Pseudo-Distributed Mode不是“单机模式”而是NameNode、DataNode、SecondaryNameNode 作为独立 JVM 进程运行在同一台物理机上并通过 HDFS 协议通信。它的核心在于core-site.xml和hdfs-site.xml的精准配置任何一项值错误都会导致进程启动后立即退出且日志里只有一行Exiting due to an error。4.1 四个 XML 文件的最小必要配置项Hadoop 3.1.3 默认配置文件位于$HADOOP_HOME/etc/hadoop/。只需修改以下四个文件其余保持默认即可。严禁复制网上大段配置只改必需字段文件名必改项值作用core-site.xmlfs.defaultFShdfs://localhost:9000HDFS 的默认文件系统 URINameNode 监听地址hdfs-site.xmldfs.replication1伪分布式只需 1 份副本集群模式通常为 3hdfs-site.xmldfs.namenode.name.dir/usr/local/hadoop/data/namenodeNameNode 元数据存储路径hdfs-site.xmldfs.datanode.data.dir/usr/local/hadoop/data/datanodeDataNode 数据块存储路径!-- core-site.xml -- configuration property namefs.defaultFS/name valuehdfs://localhost:9000/value /property /configuration!-- hdfs-site.xml -- configuration property namedfs.replication/name value1/value /property property namedfs.namenode.name.dir/name valuefile:/usr/local/hadoop/data/namenode/value /property property namedfs.datanode.data.dir/name valuefile:/usr/local/hadoop/data/datanode/value /property /configuration注意file:前缀dfs.namenode.name.dir和dfs.datanode.data.dir必须带file:协议否则 Hadoop 会尝试走 HDFS 协议写入自身形成死循环。4.2namenode -format的本质生成 ClusterID 并写入所有 data 目录执行hadoop namenode -format不是清空数据而是生成一个全局唯一的 ClusterID并将其写入dfs.namenode.name.dir和dfs.datanode.data.dir下的VERSION文件。DataNode 启动时会读取自己的VERSION文件比对其中的clusterID是否与 NameNode 的一致。不一致则拒绝注册jps就看不到 DataNode。这就是实验报告里提到的“多次 format 导致 Cluster-Id 不一致”的根源。解决方案不是删整个data/目录太粗暴而是精准清理# 1. 停止所有 Hadoop 进程 $ stop-dfs.sh # 2. 删除 NameNode 和 DataNode 的 VERSION 文件保留目录结构 $ rm /usr/local/hadoop/data/namenode/current/VERSION $ rm /usr/local/hadoop/data/datanode/current/VERSION # 3. 重新格式化此时会生成新的、一致的 ClusterID $ hadoop namenode -format # 4. 启动DataNode 将读取新 VERSION 并注册 $ start-dfs.shrm .../VERSION比rm -rf /usr/local/hadoop/data安全得多前者只重置集群标识后者会连带删除已上传的 HDFS 文件如果之前传过。4.3 验证伪分布式是否存活三步终端检测法不要依赖jps一个命令。jps只显示 Java 进程但进程可能已启动却无法提供服务。必须组合验证# 步骤1检查进程是否存在NameNode, DataNode, SecondaryNameNode $ jps | grep -E (NameNode|DataNode|SecondaryNameNode) # 应输出三行如12345 NameNode, 12346 DataNode, 12347 SecondaryNameNode # 步骤2检查端口监听9000 是 RPC 端口9870 是 WebUI 端口 $ ss -tuln | grep -E :9000|:9870 # 应看到 0.0.0.0:9000 和 0.0.0.0:9870 均处于 LISTEN 状态 # 步骤3curl 检查 WebUI 返回 HTTP 200绕过浏览器直击服务 $ curl -I http://localhost:9870 2/dev/null | head -1 # 应输出HTTP/1.1 200 OKss -tuln比netstat更快更准curl -I获取响应头比打开浏览器更可靠。这三步缺一不可是判断“活着”还是“假死”的黄金标准。5. HDFS 操作避坑hdfs dfs命令链中的五个反直觉现象与根因HDFS Shell 命令hdfs dfs -xxx看似和 Linuxls/cp/mv一样但底层是 RPC 调用存在大量隐式行为。新手常因忽略这些而反复失败。5.1hdfs dfs -mkdir不创建父目录-p参数是救命稻草Linuxmkdir -p /a/b/c会逐级创建但hdfs dfs -mkdir /a/b/c默认不创建父目录报错No such file or directory。必须显式加-p# 错误/a/b 不存在时此命令失败 $ hdfs dfs -mkdir /a/b/c # 正确-p 参数启用父目录创建 $ hdfs dfs -mkdir -p /a/b/c-p不是可选开关是 HDFS 的强制要求。因为 HDFS 的目录创建是原子操作不支持“先建父再建子”的两阶段提交。5.2hdfs dfs -put的路径解析规则本地路径必须绝对HDFS 路径可相对hdfs dfs -put local_path hdfs_path中local_path必须是绝对路径如/home/hadoop/.bashrc或相对于当前 shell 工作目录的路径如./.bashrchdfs_path若不以/开头则是相对于 HDFS 中当前用户的 home 目录即/user/$USER。# 当前用户是 hadoop其 HDFS home 是 /user/hadoop $ hdfs dfs -put ~/.bashrc test # 等价于hdfs dfs -put ~/.bashrc /user/hadoop/test # 文件最终存放在 HDFS 的 /user/hadoop/test 路径下这是最容易混淆的点test看似是相对路径实则是 HDFS 的相对路径解析基准是/user/hadoop不是 Linux 的/home/hadoop。5.3hdfs dfs -ls不显示隐藏文件-a参数揭开面纱HDFS 也遵循 Unix 隐藏文件规则以.开头但hdfs dfs -ls默认不显示隐藏文件就像 Linuxls默认不显示.bashrc。要查看 HDFS 中的.Trash回收站等系统目录必须加-a# 查看 /user/hadoop 下所有文件包括 .Trash $ hdfs dfs -ls -a /user/hadoop-a是排查“文件明明 put 了却 ls 不见”的第一检查项。5.4hdfs dfs -get失败却无提示-f强制覆盖是静默杀手hdfs dfs -get hdfs_path local_path时若local_path已存在且是目录命令会静默失败无报错但文件没下载。必须用-f强制覆盖# 若 /usr/local/hadoop/test 已存在此命令可能无反应 $ hdfs dfs -get /user/hadoop/test /usr/local/hadoop/ # 加 -f 确保覆盖 $ hdfs dfs -get -f /user/hadoop/test /usr/local/hadoop/-f不是“可选优化”是避免本地文件状态混乱的必需参数。5.5hdfs dfs -du和hdfs dfs -dus的区别字节 vs 可读大小hdfs dfs -du /path输出字节数如123456789而hdfs dfs -dus /path输出人类可读格式如117.7 M。新手常拿-du结果去df -h对比发现数字对不上——因为df -h显示的是磁盘使用量含副本、元数据而hdfs dfs -du显示的是逻辑文件大小未乘副本数。# 查看 /user/hadoop/test 的逻辑大小1份副本 $ hdfs dfs -du -s /user/hadoop/test # 输出123456789 /user/hadoop/test # 查看实际磁盘占用1份副本 逻辑大小 * 1 $ hdfs dfs -dus /user/hadoop/test # 输出117.7 M /user/hadoop/test-s参数汇总子目录-dus自动格式化二者配合才能看清真实存储压力。6. WordCount 实战验证从本地文件到 HDFS 再到 MapReduce一条命令链的全链路诊断WordCount 是 Hadoop 的 “Hello World”但它的价值不在结果而在暴露整个数据流链条中每一环是否健康本地文件能否读、HDFS 是否可写、MapReduce 框架是否就绪、YARN 是否调度成功。本节用一条命令链完成端到端验证并给出每个环节失败时的精准定位方法。6.1 构建最小测试数据集三行文本足够验证一切不要用大文件测试。三行纯文本即可覆盖所有路径# 在 /home/hadoop 下创建测试文件 $ echo -e hello world\nhello hadoop\nworld hadoop /home/hadoop/input.txt # 验证内容确保无空行、无乱码 $ cat /home/hadoop/input.txt | od -c # 输出应显示三行每行末尾有 \nod -c用十六进制查看原始字节避免cat隐藏的不可见字符如 Windows 换行符\r\n干扰 MapReduce。6.2 全链路命令put→run→get→check所有命令必须在hadoop用户下执行且确保start-dfs.sh和start-yarn.sh已运行# 步骤1上传输入文件到 HDFS-f 强制覆盖-p 创建父目录 $ hdfs dfs -mkdir -p /user/hadoop/input $ hdfs dfs -put -f /home/hadoop/input.txt /user/hadoop/input/ # 步骤2运行 WordCount指定输入输出路径-D 参数覆盖默认配置 $ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar \ wordcount \ -D mapreduce.job.reduces1 \ /user/hadoop/input /user/hadoop/output # 步骤3下载输出结果-f 强制覆盖-d 创建本地目录 $ hdfs dfs -get -f /user/hadoop/output /home/hadoop/ # 步骤4检查结果part-r-00000 是 Reduce 输出文件 $ cat /home/hadoop/output/part-r-00000 # 应输出hadoop 2 # hello 2 # world 2-D mapreduce.job.reduces1是关键强制 Reduce 数为 1确保输出只有一个文件part-r-00000避免因多个 Reduce 文件导致cat命令失效。6.3 每个环节失败的精准定位表环节失败现象根本原因快速诊断命令hdfs dfs -putput: Operation failedHDFS 未启动或dfs.datanode.data.dir权限不足hdfs dfsadmin -report查看 Live Nodes 数量ls -ld /usr/local/hadoop/data/datanode检查权限hadoop jarApplication application_XXX not foundYARN 未启动或 ResourceManager 未注册yarn node -list查看 NodeManager 状态jps | grep ResourceManagerhadoop jarjava.io.IOException: Failed to replace a bad datanodeDataNode 磁盘满或dfs.datanode.data.dir下空间不足df -h /usr/local/hadoop/data/datanodehdfs dfsadmin -report查看容量hdfs dfs -getget: Fatal internal error输出目录/user/hadoop/output已存在HDFS 不允许覆盖hdfs dfs -rm -r /user/hadoop/output清理后重试cat output/part-r-00000No such file or directoryReduce 任务失败输出目录为空yarn logs -applicationId application_XXX查看 Application 日志yarn logs -applicationId是终极武器它拉取 YARN 上该 Application 的所有 Container 日志比翻logs/目录快十倍。6.4 从那以后我每次部署 Hadoop都强制走一遍这三步验证第一次在某高校实验室带学生做这个实验时我花了 3 小时帮 A同学解决Live Nodes 0问题最后发现是 VirtualBox 网络模式设成了 NAT第二次在某公司内部培训B同学的hadoop jar一直卡在ACCEPTED查日志发现yarn.nodemanager.resource.memory-mb设成了 1024而虚拟机只分配了 2GB 内存YARN 认为资源不足拒绝调度。从此我养成了铁律只要 Hadoop 环境重建必跑三步hdfs dfs -mkdir -p /tmp/test hdfs dfs -put /etc/hosts /tmp/test/ hdfs dfs -ls /tmp/test—— 验证 HDFS 读写通路yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -write -nrFiles 1 -fileSize 1MB—— 验证 MapReduce I/O 性能curl -s http://localhost:9870/jmx?qryHadoop:serviceNameNode,nameNameNodeInfo \| jq .beans[0].LiveNodes—— 验证 JMX 接口可用性需提前sudo apt install jq。这三步耗时不到 1 分钟却能筛掉 90% 的配置型故障。希望帮到你。本文还有配套的精品资源点击获取