
简介本资源是面向大数据初学者的入门级实验指导文档适用于高校计算机、数据科学相关专业学生及转行学习者旨在解决Linux环境搭建与Hadoop基础操作能力缺失的问题。文档系统覆盖三大核心环节Linux虚拟机Ubuntu 16.04/18.04在Windows平台上的VirtualBox安装全流程20余条高频Linux命令如cd、ls、mkdir、cp、mv、rm、cat、tac、find、tar、grep等的实操示例与环境变量配置要点以及Hadoop 3.1.3伪分布式环境的完整部署步骤与WordCount验证实践。资源为单个289KB的DOCX文件内容结构清晰含实验目的、平台要求、分步操作指令、命令参数说明及结果预期便于边学边练。目前已有980人学习下载是夯实大数据开发环境基础、衔接后续MapReduce与Spark实验的关键前置材料。1. 大数据实验一Linux Hadoop 伪分布式环境从零搭起不是配环境是建可信基线你是不是也经历过下载好 Hadoop 3.1.3解压、改配置、hadoop namenode -format一气呵成start-all.sh启动后浏览器打开http://localhost:9870却只看到一个刺眼的「Live Nodes: 0」jps 一看NameNode、ResourceManager 都在唯独缺了 DataNode——连最基础的文件写入都卡死。这不是个别现象而是新手在 Windows 上跑大数据实验时最高频的“开局即崩”场景。本实验不是教你怎么点几下鼠标装个虚拟机而是带你用 Ubuntu 18.04 VirtualBox Hadoop 3.1.3 搭出一条可验证、可复位、可 debug 的伪分布式流水线从虚拟机磁盘分区规划开始到.bashrc环境变量生效验证再到hdfs dfs -ls /能真实列出目录、hadoop jar ... wordcount跑通输出结果。它专为两类人设计一类是刚接触大数据、手头只有 Win11 笔记本的学生另一类是想快速验证 Hadoop 基础操作、拒绝被“配置玄学”拖垮节奏的工程师。所有命令、路径、参数均基于实测非文档搬运每一步失败都有对应排查锚点——比如core-site.xml里hadoop.tmp.dir的路径权限问题或hdfs-site.xml中dfs.namenode.name.dir与dfs.datanode.data.dir的父子关系陷阱。这不是“能跑就行”的玩具环境而是你后续跑 Spark、Flink、Hive 的最小可信基线。2. 虚拟机与系统层Ubuntu 18.04 的磁盘、用户与 Shell 初始化2.1 VirtualBox 安装与 Ubuntu 18.04 镜像部署为什么必须选 18.04 而非 22.04VirtualBox 6.1.4项目正文指定版本对 Ubuntu 18.04 LTS 的内核模块兼容性经过长期验证而 Ubuntu 22.04 默认启用 systemd-resolved常与 Hadoop 的localhost解析逻辑冲突导致hdfs namenode启动后无法绑定0.0.0.0:9820。安装 VirtualBox 时务必勾选「Install VirtualBox NDIS6 Bridged Networking Driver」和「Install VirtualBox USB Support」否则后续挂载共享文件夹或连接 USB 设备会失败。下载 Ubuntu 18.04.6 Desktop ISO非 Server 版后在 VirtualBox 中新建虚拟机名称hadoop-dev-ubuntu18类型Linux版本Ubuntu (64-bit)内存建议 ≥2GBHadoop 伪分布式最低要求硬盘动态分配 VDI初始 25GB最大 50GB关键Hadoop 日志、临时数据、格式化后的 NameNode/Datanode 目录会持续增长20GB 容易在hadoop namenode -format后填满提示创建完成后进入「设置 → 存储 → 控制器SATA」点击「添加光驱图标」挂载 Ubuntu ISO再进「系统 → 主板」确保「启动顺序」中「光驱」排第一最后「网络 → 网卡1」设为「桥接网卡」避免 NAT 下端口映射混乱。启动虚拟机按向导完成 Ubuntu 安装。关键动作在「Who are you?」页面将用户名设为hadoop非默认ubuntu密码设为hadoop便于记忆后续 Hadoop 用户一致性。安装完毕重启首次登录即进入hadoop用户主目录。2.2 Shell 初始化.bashrc改写、Java 环境注入与权限闭环Hadoop 3.1.3强制依赖 Java 8OpenJDK 8 或 Oracle JDK 8不支持 Java 11。Ubuntu 18.04 默认未预装 Java需手动安装sudo apt update sudo apt install openjdk-8-jdk -y验证安装java -version # 输出应为openjdk version 1.8.0_392 ...接下来注入环境变量。不要直接编辑/etc/environment全局生效但不加载 shell 函数而是精准修改当前用户~/.bashrc# 使用 nano比 vim 更友好新手不易卡住 nano ~/.bashrc在文件末尾追加以下内容注意路径与版本号严格匹配# Java environment export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export JRE_HOME${JAVA_HOME}/jre export CLASSPATH.:${JAVA_HOME}/lib:${JRE_HOME}/lib # Hadoop environment (预留待 Hadoop 安装后启用) # export HADOOP_HOME/usr/local/hadoop # export PATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin # export HADOOP_CONF_DIR$HADOOP_HOME/etc/hadoop # export HADOOP_MAPRED_HOME$HADOOP_HOME # export HADOOP_COMMON_HOME$HADOOP_HOME # export HADOOP_HDFS_HOME$HADOOP_HOME # export YARN_HOME$HADOOP_HOME # export HADOOP_COMMON_LIB_NATIVE_DIR$HADOOP_HOME/lib/native # export HADOOP_OPTS-Djava.library.path$HADOOP_HOME/lib/native保存退出CtrlO → Enter → CtrlX立即生效source ~/.bashrc echo $JAVA_HOME # 应输出/usr/lib/jvm/java-8-openjdk-amd64注意/usr/lib/jvm/java-8-openjdk-amd64是 OpenJDK 8 在 Ubuntu 18.04 的标准路径。若你用的是 Oracle JDK请替换为实际路径如/usr/java/jdk1.8.0_391。source命令必须执行否则新终端仍无JAVA_HOME。2.3 用户与目录权限为什么hadoop用户必须拥有/usr/local写权限Hadoop 官方推荐安装路径为/usr/local/hadoop但 Ubuntu 默认该目录属主为root:root权限drwxr-xr-x。若以hadoop用户解压hadoop-3.1.3.tar.gz到此路径会因权限不足导致后续chown -R hadoop:hadoop /usr/local/hadoop失败或hadoop namenode -format时无法创建name目录。正确做法分三步# 1. 创建 hadoop 用户组虽单用户但保持规范 sudo addgroup hadoop # 2. 将 hadoop 用户加入 hadoop 组并赋予 /usr/local 写权限 sudo usermod -a -G hadoop hadoop sudo chown -R hadoop:hadoop /usr/local sudo chmod -R 775 /usr/local # 3. 验证权限 ls -ld /usr/local # 应显示drwxrwxr-x 11 hadoop hadoop 4096 ...此时hadoop用户对/usr/local具有读、写、执行权限且组内其他成员未来扩展时也可写。这是后续tar -zxf hadoop-3.1.3.tar.gz -C /usr/local/成功的前提。3. Hadoop 伪分布式安装从解压到jps显示 DataNode 的完整链路3.1 下载、解压与基础目录结构固化Hadoop 3.1.3 官方二进制包非源码是唯一推荐安装方式。下载地址https://archive.apache.org/dist/hadoop/core/hadoop-3.1.3/hadoop-3.1.3.tar.gz在 Ubuntu 终端中执行# 进入临时目录下载 cd /tmp wget https://archive.apache.org/dist/hadoop/core/hadoop-3.1.3/hadoop-3.1.3.tar.gz # 解压到 /usr/local此前已赋权 sudo tar -zxf hadoop-3.1.3.tar.gz -C /usr/local/ # 创建软链接避免硬编码路径 sudo ln -s /usr/local/hadoop-3.1.3 /usr/local/hadoop # 修改属主关键 sudo chown -R hadoop:hadoop /usr/local/hadoop-3.1.3 sudo chown -R hadoop:hadoop /usr/local/hadoop验证结构ls -l /usr/local/ | grep hadoop # 应显示 # lrwxrwxrwx 1 root root 21 Apr 10 10:00 hadoop - /usr/local/hadoop-3.1.3 # drwxr-xr-x 11 hadoop hadoop 4096 Apr 10 09:58 hadoop-3.1.33.2 四大核心配置文件core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml的最小安全集Hadoop 伪分布式只需修改 4 个 XML 文件其余全部保留默认值。所有配置均位于/usr/local/hadoop/etc/hadoop/。使用nano编辑避免 vim 模式切换困扰core-site.xml定义 HDFS 访问入口与临时目录configuration property namefs.defaultFS/name valuehdfs://localhost:9000/value /property property namehadoop.tmp.dir/name value/usr/local/hadoop/tmp/value descriptionA base for other temporary directories./description /property /configuration参数说明fs.defaultFS是 HDFS 的 URIhdfs://localhost:9000表示 NameNode 运行在本机 9000 端口hadoop.tmp.dir是 Hadoop 所有临时文件包括 NameNode 的 edits log、Datanode 的 block 存储根的父目录必须由 hadoop 用户可写且不能与系统/tmp混用避免被系统清理。hdfs-site.xml定义 NameNode 与 Datanode 的存储路径configuration property namedfs.replication/name value1/value descriptionDefault block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time./description /property property namedfs.namenode.name.dir/name valuefile:/usr/local/hadoop/hdfs/name/value /property property namedfs.datanode.data.dir/name valuefile:/usr/local/hadoop/hdfs/data/value /property /configuration参数说明dfs.replication1是伪分布式的标志单节点无需冗余dfs.namenode.name.dir和dfs.datanode.data.dir必须是绝对路径且目录需提前创建并赋权。注意name.dir和data.dir是两个独立目录不可共用同一路径。mapred-site.xml启用 MapReduce 框架YARN 模式# 先复制模板 cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml nano /usr/local/hadoop/etc/hadoop/mapred-site.xml填入configuration property namemapreduce.framework.name/name valueyarn/value /property /configurationyarn-site.xml配置 ResourceManager 与 NodeManagerconfiguration property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property property nameyarn.resourcemanager.hostname/name valuelocalhost/value /property /configuration参数说明yarn.nodemanager.aux-servicesmapreduce_shuffle是 MapReduce 任务 shuffle 阶段必需的服务yarn.resourcemanager.hostnamelocalhost确保 ResourceManager 绑定本机。3.3 目录初始化与格式化hadoop namenode -format的前置检查清单在执行格式化前必须手动创建并赋权hdfs-site.xml中声明的目录# 创建 HDFS 存储根目录 mkdir -p /usr/local/hadoop/hdfs/name mkdir -p /usr/local/hadoop/hdfs/data mkdir -p /usr/local/hadoop/tmp # 赋权关键 sudo chown -R hadoop:hadoop /usr/local/hadoop/hdfs sudo chown -R hadoop:hadoop /usr/local/hadoop/tmp sudo chmod -R 755 /usr/local/hadoop/hdfs sudo chmod -R 755 /usr/local/hadoop/tmp验证ls -ld /usr/local/hadoop/hdfs/name /usr/local/hadoop/hdfs/data /usr/local/hadoop/tmp # 三者均应显示drwxr-xr-x 2 hadoop hadoop 4096 ...此时执行格式化# 切换到 hadoop 用户确保环境变量生效 su - hadoop # 进入 Hadoop 目录 cd /usr/local/hadoop # 执行格式化仅首次 bin/hdfs namenode -format现象输出中出现Storage directory /usr/local/hadoop/hdfs/name has been successfully formatted.即成功。若报错Cannot create directory /usr/local/hadoop/hdfs/name/current说明权限未生效回退检查chown步骤。4. 启动、验证与避坑从start-all.sh到Live Nodes: 1的血泪排查4.1 启动集群与进程校验jps是唯一可信指标Hadoop 3.x 已弃用start-all.sh官方文档明确标注 deprecated但本实验为兼容性与教学清晰度仍使用它内部调用start-dfs.shstart-yarn.sh# 确保在 /usr/local/hadoop 目录下 cd /usr/local/hadoop # 启动需 hadoop 用户执行 sbin/start-all.sh启动后立即执行jpsjps成功状态应显示 6 个进程3210 NameNode 3345 DataNode 3521 ResourceManager 3632 NodeManager 3755 SecondaryNameNode 3890 Jps注意SecondaryNameNode是伪分布式必需组件负责定期合并 NameNode 的 edits log 与 fsimage防止日志爆炸。若缺失说明hdfs-site.xml配置未生效或core-site.xml的fs.defaultFS错误。4.2 Web UI 验证http://localhost:9870与http://localhost:8088的关键信息解读http://localhost:9870HDFS UI左侧导航栏「Utilities → Browse the file system」可查看 HDFS 根目录顶部「Summary」中「Live Nodes」应为1点击「1」可查看 Datanode 详情IP、容量、状态。http://localhost:8088YARN UI顶部「Cluster」→「Nodes」应显示1个 Active NodeManager「Applications」为空表示无任务运行。若9870页面显示Live Nodes: 0不要立刻重试namenode -format——这是最危险操作会导致 ClusterID 不一致见避坑章节。4.3 常见问题与排查DataNode 启动失败的五大根因与解法避坑DataNode 启动失败是本实验最高频故障90% 以上源于配置或权限而非代码缺陷。现象 1jps无 DataNodehadoop-daemon.sh start datanode报错No such file or directory原因hdfs-site.xml中dfs.datanode.data.dir路径不存在或hadoop.tmp.dir未在core-site.xml中声明导致 DataNode 无法定位本地存储根。解决# 检查路径是否存在 ls -ld /usr/local/hadoop/hdfs/data # 若不存在创建并赋权 mkdir -p /usr/local/hadoop/hdfs/data sudo chown -R hadoop:hadoop /usr/local/hadoop/hdfs/data现象 2jps无 DataNodelogs/hadoop-hadoop-datanode-*.log中出现java.io.IOException: Incompatible clusterIDs原因多次执行hadoop namenode -format导致 NameNode 的VERSION文件位于dfs.namenode.name.dir与 Datanode 的VERSION文件位于dfs.datanode.data.dir中clusterID不一致。这是项目正文提到的“Livenode 数量为 0”的直接原因。解决精准清除非暴力 rm -rf# 1. 停止所有 Hadoop 进程 sbin/stop-all.sh # 2. 查看 NameNode 的 clusterID cat /usr/local/hadoop/hdfs/name/current/VERSION | grep clusterID # 3. 查看 Datanode 的 clusterID cat /usr/local/hadoop/hdfs/data/current/VERSION | grep clusterID # 4. 若两者不同将 Datanode 的 VERSION 文件中 clusterID 替换为 NameNode 的值 nano /usr/local/hadoop/hdfs/data/current/VERSION # 找到 clusterIDxxx 行改为与 NameNode 一致的值 # 5. 重启 sbin/start-all.sh现象 3jps有 DataNode但9870页面仍显示Live Nodes: 0原因core-site.xml中fs.defaultFS的 hostname 解析失败。Hadoop 默认用InetAddress.getLocalHost().getHostName()获取本机名若/etc/hosts中127.0.0.1对应的主机名不是localhost则 DataNode 注册失败。解决# 查看本机名 hostname # 编辑 hosts sudo nano /etc/hosts # 确保包含 # 127.0.0.1 localhost # 127.0.1.1 你的主机名 # Ubuntu 默认添加保留现象 4start-all.sh后jps显示所有进程但9870页面打不开或超时原因防火墙阻止 9870 端口。Ubuntu 18.04 默认关闭防火墙但若开启过ufw需放行。解决sudo ufw status # 查看状态 sudo ufw allow 9870 sudo ufw allow 8088现象 5hdfs dfs -ls /报错Connection refused原因NameNode 未真正启动或core-site.xml的fs.defaultFS端口9000被占用。解决# 检查 9000 端口占用 sudo lsof -i :9000 # 若被占用杀掉进程或修改 core-site.xml 的端口为 9001需同步改 hdfs-site.xml 的 dfs.namenode.rpc-address # 强制重启 NameNode sbin/hadoop-daemon.sh stop namenode sbin/hadoop-daemon.sh start namenode5. HDFS 与 MapReduce 实操从hdfs dfs命令到 WordCount 跑通的端到端验证5.1 HDFS 基础操作hdfs dfs命令族与本地文件系统映射Hadoop 3.x 推荐使用hdfs dfs替代已废弃的hadoop fs。所有操作需在hadoop用户下执行# 1. 创建 HDFS 用户目录等价于 Linux 的 /home/hadoop hdfs dfs -mkdir -p /user/hadoop # 2. 在 /user/hadoop 下创建 test 目录 hdfs dfs -mkdir /user/hadoop/test # 3. 查看 HDFS 目录列表验证创建成功 hdfs dfs -ls /user/hadoop # 输出应含drwxr-xr-x - hadoop supergroup 0 ... # 4. 上传本地 .bashrc 到 HDFS test 目录 hdfs dfs -put ~/.bashrc /user/hadoop/test/ # 5. 查看 test 目录内容 hdfs dfs -ls /user/hadoop/test # 输出应含-rw-r--r-- 1 hadoop supergroup 3771 ... # 6. 从 HDFS 下载文件到本地 /usr/local/hadoop 目录 hdfs dfs -get /user/hadoop/test/.bashrc /usr/local/hadoop/ # 7. 验证下载文件存在且大小一致 ls -l /usr/local/hadoop/.bashrc ~/.bashrc # 两者 size 应相同逻辑说明hdfs dfs命令通过fs.defaultFS定义的 URI 连接 NameNode所有操作均经由 HDFS 协议与本地ls/cp/mv完全隔离。-put是上传-get是下载-mkdir -p支持递归创建。5.2 WordCount 实战用 Hadoop 自带 Jar 包验证 MapReduce 流水线Hadoop 发行包自带hadoop-mapreduce-examples-3.1.3.jar其中wordcount是最简 MapReduce 示例# 1. 在 HDFS 创建 input 目录 hdfs dfs -mkdir -p /user/hadoop/input # 2. 上传一个测试文本用 .bashrc 本身即可 hdfs dfs -put ~/.bashrc /user/hadoop/input/ # 3. 运行 WordCount输出目录不能预先存在 hdfs dfs -rm -r /user/hadoop/output hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/hadoop/input /user/hadoop/output # 4. 查看输出结果part-r-00000 是最终结果文件 hdfs dfs -cat /user/hadoop/output/part-r-00000 | head -20参数说明hadoop jar命令指定 Jar 包路径、主类名wordcount、输入路径、输出路径。输出路径/user/hadoop/output必须不存在否则报错FileAlreadyExistsException。-cat读取结果文件head -20只显示前 20 行避免刷屏。成功输出示例 1 alias 1 complete 1 export 1 if 1 then 1 fi 1 ...这证明NameNode 可调度、Datanode 可读写、ResourceManager 可分配 Container、NodeManager 可执行 Task——整个 Hadoop 伪分布式流水线已贯通。5.3 权限与日志如何快速定位 MapReduce 任务失败原因当hadoop jar报错如Application application_XXX failed不要只看控制台红字要查三处日志YARN ApplicationMaster 日志最详细# 在 YARN UI http://localhost:8088 的 Applications 列表中点击失败应用的 Application ID → Logs → All Logs # 或命令行获取 yarn logs -applicationId application_1712789012345_0001NodeManager 本地日志定位 Container 启动失败# 日志路径由 yarn-site.xml 的 yarn.nodemanager.log-dirs 定义默认为 ls -lt /usr/local/hadoop/logs/userlogs/ # 进入最新 application 目录查看 stderr/stdoutHDFS 操作审计日志定位文件权限/路径错误# 查看 NameNode 日志 tail -50 /usr/local/hadoop/logs/hadoop-hadoop-namenode-*.log关键技巧所有日志中搜索ERROR、FATAL、Caused by忽略WARN多数为无关提示。若看到Permission denied: userhadoop, accessWRITE, inode/user说明/user目录属主不是hadoop需hdfs dfs -chown hadoop:supergroup /user。6. 环境固化与复位一键清理、快照备份与跨实验迁移的工程化习惯6.1 一键清理脚本hadoop-clean.sh—— 为下次实验留出干净画布反复格式化namenode是新手最大误区。我给自己写了这个脚本放在/usr/local/bin/下每次实验前执行一次#!/bin/bash # 文件名/usr/local/bin/hadoop-clean.sh # 赋权sudo chmod x /usr/local/bin/hadoop-clean.sh echo Stopping all Hadoop services... /usr/local/hadoop/sbin/stop-all.sh 2/dev/null echo Removing HDFS data directories... sudo rm -rf /usr/local/hadoop/hdfs/name/* sudo rm -rf /usr/local/hadoop/hdfs/data/* sudo rm -rf /usr/local/hadoop/tmp/* echo Removing YARN logs... sudo rm -rf /usr/local/hadoop/logs/userlogs/* sudo rm -rf /usr/local/hadoop/logs/*.log.* echo Removing HDFS output directories... hdfs dfs -rm -r /user/hadoop/output 2/dev/null hdfs dfs -rm -r /user/hadoop/input 2/dev/null echo Done. Ready for hadoop namenode -format and start-all.sh.执行sudo hadoop-clean.sh bin/hdfs namenode -format sbin/start-all.sh逻辑说明该脚本只清空数据目录name/、data/、tmp/不删除配置文件、Jar 包、脚本确保环境结构完整。2/dev/null屏蔽不存在目录的报错提升鲁棒性。6.2 VirtualBox 快照把“能跑的环境”固化为可回滚的黄金镜像VirtualBox 的快照功能是实验者的后悔药。在sbin/start-all.sh成功且jps显示 6 个进程后立即创建快照VirtualBox 管理器 → 选中hadoop-dev-ubuntu18→ 「快照」→ 「拍摄快照」名称hadoop-3.1.3-pseudo-ready描述Hadoop 3.1.3 伪分布式环境已启动Live Nodes: 1WordCount 可跑通后续若配置搞乱、系统崩溃右键快照 → 「还原」30 秒回到黄金状态。不要依赖“重装系统”要依赖“快照回滚”——这是我在某高校大数据实验室带学生时从翻车 17 次后总结的铁律。6.3 跨实验迁移如何把本实验环境无缝用于 Spark/Flink 实验本实验搭建的 Ubuntu 18.04 Java 8 Hadoop 3.1.3 伪分布式环境本身就是 Spark 3.x 和 Flink 1.15 的理想底座。只需两步Spark 集成下载spark-3.3.2-bin-hadoop3.tgz解压到/usr/local/配置SPARK_HOME和PATH并在conf/spark-env.sh中添加export HADOOP_CONF_DIR/usr/local/hadoop/etc/hadoop export YARN_CONF_DIR/usr/local/hadoop/etc/hadoop此时spark-shell --master yarn即可直连本机 YARN。Flink 集成下载flink-1.15.4-bin-scala_2.12.tgz解压后在conf/flink-conf.yaml中设置jobmanager.memory.process.size: 1600m taskmanager.memory.process.size: 1600m # 启用 YARN 模式 execution.target: yarn-per-job关键参数所有集成框架必须指向同一个HADOOP_CONF_DIR确保它们读取相同的core-site.xml和hdfs-site.xml。这样你在本实验中创建的/user/hadoop目录Spark 和 Flink 都能直接访问无需重复上传数据。从那以后我每次开始新实验都强制走一遍hadoop-clean.sh→namenode -format→start-all.sh→jps→hdfs dfs -ls /→WordCount验证。不是为了炫技而是让每一次实验都建立在可验证的基线上——毕竟在大数据的世界里环境的确定性比算法的精巧性更早决定成败。希望帮到你。本文还有配套的精品资源点击获取