☰
大数据实验全解析:从Linux命令到Hadoop伪分布式跑通WordCount
2026/10/2 1:08:44 网站建设 项目流程

简介:这是一份《大数据原理与技术课程实验报告》完整版文档,以docx格式提供,主要面向正在学习大数据基础、需要完成Linux与Hadoop入门实验的本科生或自学者。实验基于Ubuntu 16.04与Hadoop 2.7.1环境,从安装虚拟机开始,重点演示了目录切换、目录与文件创建删除、内容查看、复制移动、权限修改、文件查找、打包压缩等常用Linux操作,每步都给出具体命令与执行效果;同时完整记录了Hadoop伪分布式环境搭建、NameNode格式化以及WordCount实例运行验证的过程,并配有环境变量配置说明。报告覆盖实验目的、实验平台、实验内容与完成情况等结构,条理清晰,可作为课程实验报告模板。资源仅1个docx文件,压缩包大小约3.29MB,下载解压即可直接使用;已有5240人学习下载。对于需要快速梳理大数据入门操作、规范完成实验报告的学习者,这份文档能提供可对照的实操步骤和结果参考。

1. 从一条命令开始的“大数据”课:这份实验报告到底在练什么

“大数据”这三个字听起来很宏大,但绝大多数人的第一节课不是 Spark,也不是 Flink,而是 Linux 命令行。Hadoop 跑在 Linux 上,MapReduce 作业调度靠 Shell 脚本,HDFS 文件操作也全是命令行。这份《大数据原理与技术课程实验报告》完整版,就是一条从“装虚拟机”走到“跑通 WordCount”的完整路径。它覆盖了 Ubuntu 16.04 安装、18 类常用 Linux 命令、Hadoop 伪分布式搭建,以及 HDFS 文件上传下载操作,适合正在修大数据课程、需要交实验报告,或者自学入门想找一份可复现资料的人参考。下面按实验推进顺序逐层拆开,讲清每步的为什么、怎么改、失败时看哪里。

2. 大数据课程的第一关:为什么先装 Linux 虚拟机

2.1 VirtualBox 装 Ubuntu:版本选择与安装界面分辨率问题

实验报告里用的平台是 Windows 10 主机加 VirtualBox 虚拟机,虚拟机系统是 ubuntukylin-16.04。这个组合在今天看来不算新,但作为课程实验环境仍然合适。Ubuntu Kylin 16.04 是基于 Ubuntu 16.04 的中文优化版本,对国内学生友好,而 16.04 恰好也是很多教材默认推荐的版本,教程资源丰富,遇到问题容易搜到答案。

虚拟机软件选 VirtualBox 最直接的原因是不需要买授权,安装包小,机器配置要求低。实验报告里那台电脑是 i5-10300H 加 16GB 内存,跑一个 Ubuntu 虚拟机完全没有压力。如果你自己电脑内存只有 8GB,建议创建虚拟机时分配 2GB 内存,硬盘动态分配 20GB 就够。安装过程中最容易翻车的不是安装本身,而是安装界面分辨率太小,按钮显示不全。报告作者给了一个很实用的解决思路:安装阶段先用 WIN+鼠标拖动窗口挪出安装按钮,装完系统后再安装 VirtualBox 增强功能,重启后就能调整分辨率。

# 安装增强功能(虚拟机内部执行) sudo apt-get update sudo apt-get install -y build-essential dkms linux-headers-$(uname -r) # 然后点击 VirtualBox 菜单栏:设备 -> 安装增强功能 # Ubuntu 会自动挂载 VBoxGuestAdditions.iso,在 /media 下找到它并执行 sudo /media/cdrom/VBoxLinuxAdditions.run

增强功能装好以后不只是分辨率问题解决了,还能启用共享剪贴板和共享文件夹,这两个功能在后续实验里非常有用。共享文件夹建议在 VirtualBox 设置里配置一个,挂载到虚拟机的/mnt/share,这样 Windows 里下载好的 Hadoop 安装包、JDK 压缩包可以直接放到共享目录里,虚拟机内部直接复制,不用走网络传输。

2.2 目录切换与文件查看:cd、ls、mkdir 的课堂级解读

实验报告第一部分是 18 类 Linux 命令的训练。大部分初学者知道 cd 是切换目录,但没有意识到这套命令组合起来就是 Hadoop 日常操作的基操。比如cd /usr/local切到 Hadoop 安装目录,ls确认目录内容,mkdir -p创建多级目录,这在后面创建 HDFS 用户目录时还会遇到。

cd /usr/local # 进入 /usr/local cd .. # 回到上一级 cd ~ # 回到当前用户主目录 ls -al /tmp # 以长格式显示 /tmp 下所有文件(包含隐藏文件) mkdir -p a1/a2/a3/a4 # 递归创建多级目录 rmdir -p a1/a2/a3/a4 # 递归删除目录,前提是这些目录为空

需要留意的是rmdir -p只能删空目录,它从最深一级开始向上删。如果 a4 里有文件,rmdir 会报错。实验报告里先创建再删除,就是为了让你建立“创建目录”和“删除空目录”这两个方向的完整认知。而实际工作中删除非空目录用的更多是rm -rf,但课程实验为了安全,先用 rmdir 让你理解机制。

2.3 文件操作:cp、mv、rm、find、tar 的常见误用

这组命令是实验报告里最容易被“看一眼就跳过”的部分。几乎每个学生都觉得 cp 就是复制,mv 就是移动,但放到大数据场景里,问题就来了——你用cp -r和cp -p复制一个有权限属性的目录时,结果完全不同。实验报告中用了sudo cp -r /tmp/test /usr复制目录,用sudo mv /usr/bashrc1 /usr/test移动文件,用sudo rm -R /usr/test2删除目录,这些命令在 Hadoop 的 etc/hadoop 目录备份时经常用到。

sudo cp ~/.bashrc /usr/bashrc1 # 复制并重命名 cd /tmp && mkdir test sudo cp -r /tmp/test /usr # 递归复制目录 sudo mv /usr/bashrc1 /usr/test # 移动文件到另一目录 sudo mv /usr/test /usr/test2 # 目录重命名 sudo rm /usr/test2/bashrc1 # 删除单个文件 sudo rm -R /usr/test2 # 递归删除整个目录 find ~/.bashrc # 按路径查找文件 sudo tar -zcv -f /test.tar.gz test # 打包并 gzip 压缩 sudo tar -zxv -f /test.tar.gz -C /tmp # 解压到指定目录

find ~/.bashrc本质上不是按名字搜索全盘,而是按路径定位。如果写成find / -name ".bashrc",才是在根目录全局搜索。面试或考试里经常拿这个区别挖坑。tar 命令参数需要区分:-z代表使用 gzip,-c创建归档,-x解归档,-v显示过程,-f指定归档文件名,-C指定解压目标目录。实验报告的写法tar -zcv是标准组合,但注意有些老教程写的是tar zcvf不带横杠,GNU tar 两者都认,考试时按老师的习惯来即可。

3. 从文件查看到环境变量:单机操作与后续 HDFS 操作的对应关系

3.1 查看文件内容的六种姿势:cat、tac、more、head、tail

这组命令本身不难,但作为大数据工程师,读日志、查看配置文件、分析中间结果,全部依赖这些命令。cat 适合小文件,tac 反向输出,more 分页,head 取前几行,tail 取后几行。实验报告里给出的例子非常有针对性:

cat ~/.bashrc # 全量输出 tac ~/.bashrc # 从最后一行反序输出 more ~/.bashrc # 分页显示,空格翻页,q 退出 head -n 20 ~/.bashrc # 显示前 20 行 head -n -50 ~/.bashrc # 显示除最后 50 行外的所有行 tail -n 20 ~/.bashrc # 显示最后 20 行 tail -n +50 ~/.bashrc # 从第 50 行开始显示到文件末尾

这里有一个容易被忽略的点:head -n -50和tail -n +50这两个带正负号的写法不是一个教学符号,而是 GNU coreutils 的真实语义。head -n -50的含义是“输出除末尾 50 行以外的内容”,tail -n +50的含义是“从第 50 行开始输出”。用人话说,前者掐掉尾部,后者掐掉头部。这个细节在面试笔试里偶尔会出现,实验报告能包含这两个参数算是有心。

3.2 touch、chown、环境变量:从文件时间到配置生效链路

touch 不只是建空文件,它的核心功能是修改时间戳。实验报告里touch -d "5 days ago" hello把文件时间改成了 5 天前,这在自动化脚本里用来触发增量更新或让文件“变老”的场景很实用。chown 命令用于修改文件所有者,实验里的操作是sudo chown root /tmp/hello,把所有权改成 root。请注意实验报告里只用了 chown 而没有用 chgrp 和 chmod,课程阶段不需要,但实际配置 Hadoop 时,hadoop用户对安装目录必须有写权限,这一点后续很容易踩坑。

环境变量配置是实验报告里连接 Linux 命令和 Hadoop 安装的关键。实验报告给出的方式是在~/.bashrc末尾追加 JDK 的 JAVA_HOME、CLASSPATH、PATH 配置:

sudo vim ~/.bashrc # 在文件末尾追加以下内容 export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH # 保存退出后执行 source ~/.bashrc echo $JAVA_HOME # 验证变量是否生效

注意实验报告里第一次写的是jdk1.7.0_60,最下面又出现了jdk1.8.0_162,这个矛盾其实是有教学含义的——它提醒你 JAVA_HOME 必须与实际解压路径完全一致。环境变量里的路径写错是新手最高频的报错来源,后续启动 Hadoop 时如果提示 JAVA_HOME not set,绝大多数问题就出在这里。正确做法是先ls /usr/lib/jvm查看实际安装的 JDK 目录名,再复制粘贴到配置文件里。

4. Hadoop 伪分布式实验:从配置到跑通 WordCount

4.1 核心配置文件:core-site.xml 与 hdfs-site.xml

Hadoop 伪分布式指的是在一台机器上同时运行 NameNode、DataNode、ResourceManager、NodeManager 这几个进程。配置方法在实验报告里只说“配置 core-site.xml 和 hdfs-site.xml”,没有展开,这一步恰恰是整个实验的决定性环节。hadoop-3.1.3 解压到/usr/local/hadoop后,需要先去修改 etc/hadoop 目录下的配置文件。

core-site.xml 配置了 HDFS 的访问地址,hdfs-site.xml 配置了副本数和 NameNode 数据目录。伪分布式模式必须把副本数设成 1,否则 DataNode 会把数据写给集群里的其他节点,单机环境下会报副本数不足的警告甚至无法写入。

<!-- core-site.xml --> <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration> <!-- hdfs-site.xml --> <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration>

还有一点容易被遗漏:hadoop-env.sh 里的export JAVA_HOME=${JAVA_HOME}必须改成实际 JDK 路径。实验报告里问题 3 的第 3 条明确记录了这个问题,这个配置修改是伪分布式安装最常见的失败点,很多人格式化 NameNode 成功,但启动 start-dfs.sh 时报错误,原因就是 hadoop-env.sh 找不到 JAVA_HOME。

4.2 格式化 NameNode 与启动守护进程

配置改完后,需要格式化 NameNode 再启动。格式化命令是:

cd /usr/local/hadoop ./bin/hdfs namenode -format

格式化会生成 NameNode 所需的 namespace 元数据。注意“格式化只在第一次启动前执行一次”,如果因为配置问题反复格式化,会导致 DataNode 的 clusterID 与 NameNode 不一致,启动数据节点报错。若遇到这种问题,正确方式是删除/usr/local/hadoop/tmp里的全部内容再格式化和启动,一劳永逸。

启动 HDFS 的命令是./sbin/start-dfs.sh。实验报告特别强调“start-dfs.sh 是个完整的可执行文件,中间没有空格”,这看起来像是多余提示,实际上很多学生真的会把命令敲成start-dfs .sh或者在 start 和 dfs 之间加空格。启动后输入jps检查进程,正常情况会看到 NameNode、DataNode 和 SecondaryNameNode。

cd /usr/local/hadoop ./sbin/start-dfs.sh jps # 期望看到类似输出: # 12345 NameNode # 12346 DataNode # 12347 SecondaryNameNode

如果 jps 只看到 Jps 自己,就要去/usr/local/hadoop/logs下的 hadoop-hadoop-namenode-*.log 里查原因。常见的启动失败原因有:端口 9000 的拒绝连接、ssh localhost 没免密、权限目录不对。伪分布式模式默认通过 ssh 访问本机,所以先执行ssh localhost确认能免密登录,如果要求输密码,要先生成密钥并安装:

ssh-keygen -t rsa -P "" cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys

4.3 跑通 WordCount 实例与 HDFS 基本文件操作

Hadoop 安装完只代表进程起来了,真正验证集群能力的是跑一个实际作业。实验报告用的是 Hadoop 自带的 mapreduce-examples-3.1.3.jar 里的 wordcount。运行前需要先把输入文件上传到 HDFS:

cd /usr/local/hadoop # 为 hadoop 用户在 HDFS 创建用户目录 ./bin/hdfs dfs -mkdir -p /user/hadoop # 在用户目录下创建 test 文件夹 ./bin/hdfs dfs -mkdir test # 上传本地文件到 HDFS ./bin/hdfs dfs -put ~/.bashrc test # 查看上传结果 ./bin/hdfs dfs -ls test # 下载 HDFS 文件回本地 ./bin/hdfs dfs -get test ./

文件传入 HDFS 后,运行 wordcount 作业统计 LICENSE.txt 或 .bashrc 里的单词频率:

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount input output

作业跑完以后,输出目录不能存在,否则会报错“Output directory already exists”。这是个让人印象深刻的报错,它告诉你 Hadoop 不会覆盖历史输出目录,要手动删除或换新目录名。此外还需要注意的是 MapReduce 作业跑起来后,Java 进程是一个 JobHistoryServer 或 YarnChild 的形式,你在终端里会看到进度条百分比,这是正常的,不是卡死。

HDFS 命令和 Linux 命令在参数习惯上高度相似:dfs -mkdir -p的 -p 与 Linux 的 mkdir -p 含义一致;-put对应上传,-get对应下载。但 HDFS 的删除命令dfs -rm -r不需要 sudo,因为 HDFS 的权限模型和 Linux 不太一样,root 在 HDFS 里不一定是超级用户,这是很多新手后面才会遇到的坑。

5. 避坑与验收技巧:实验报告里没写的那几页

5.1 高频报错实录与解决办法

实验报告列出了三条亲身踩坑记录,这三条也是这一代学生集体翻车的重灾区。按“现象 -> 原因 -> 解决”格式整理如下。

报错场景一:Ubuntu 安装界面分辨率太小,按钮点不到

  • 现象:安装向导窗口超出屏幕范围,按钮无法点击,系统无法完成安装。
  • 原因:虚拟机默认的 VGA 显存和分辨率设置不适用于真实屏幕缩放。
  • 解决:安装阶段按住 WIN 键拖动窗口,把按钮拖回可视区域,点完安装。装完系统后立刻安装 VirtualBox 增强功能,重启后在系统设置中调整分辨率。这一步其实不是可选配置,而是虚拟机的基线配置,任何后续实验都建立在可用分辨率之上。

报错场景二:Ubuntu 虚拟机装完上不了网

  • 现象:虚拟机显示已连接到网络,但浏览器无法打开任何页面。
  • 原因:VirtualBox 默认 NAT 网卡的“网卡名称”和宿主机实际网络接口不匹配,尤其是在主机有多块网卡(有线、无线)的电脑上。
  • 解决:关闭虚拟机,在设置 -> 网络中确认网卡连接方式为 NAT,打开宿主机的网络连接页面,找到当前实际联网的网卡(如 Realtek PCIe GbE Family Controller 或 MediaTek Wi-Fi 6 MT7921),在 VirtualBox 对应位置绑定该网卡,再启动虚拟机。

报错场景三:启动 Hadoop 时提示 JAVA_HOME is not set

  • 现象:执行 start-dfs.sh 后立即报错 ERROR: JAVA_HOME is not set and could not be found。
  • 原因:hadoop-env.sh 里的export JAVA_HOME=${JAVA_HOME}依赖于系统环境变量,而~/.bashrc里的环境变量配置未正确生效,或 JDK 路径写得不对,Shell 取不到值。
  • 解决:打开/usr/local/hadoop/etc/hadoop/hadoop-env.sh,找到 JAVA_HOME 那一行,直接把${JAVA_HOME}替换成实际路径,例如export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162,保存后重新执行source /usr/local/hadoop/etc/hadoop/hadoop-env.sh再启动。这个修改是永久性的,不依赖用户登录状态。

5.2 版本差异带来的隐藏边界

实验报告的摘要里提到 Hadoop 2.7.1,正文里实验用的却是 hadoop-3.1.3.tar.gz。这两个版本的差异不是翻译问题,而是实质性的操作边界。Hadoop 2.7.1 的 MapReduce 默认仍跑在 YARN 上,但 3.1.3 的默认端口和 Web 页面路径有明显变化。比如 2.x 的 NameNode Web UI 默认端口是 50070,3.x 改成了 9870;2.x 的 ResourceManager 页面在 8088,3.x 保留了 8088 但页面内容改为 Capacity Scheduler 的展示方式。如果照着 2.7.1 的书做 3.1.3 的实验,在验证“访问 Web 界面”那一步就找不到对应端口。实验报告里没有给出具体截图,但从配置方法和目录结构来看,实验是按 3.1.3 走的,这一点要特别注意。

5.3 自查与验收:一个能少走弯路的检查清单

做完实验后判断是否“真正完成”,不是靠截图,而是靠五个验证点。

第一,echo $JAVA_HOME能正确输出 JDK 路径。第二,jps命令同时看到 NameNode、DataNode、SecondaryNameNode 三个进程。第三,浏览器访问http://localhost:9870能看到 NameNode 状态页,Live Nodes 数量为 1。第四,HDFS 的-ls test能看到上传的文件,且文件大小与实际文件一致。第五,wordcount 的输出 part-r-00000 里单词统计结果非空。如果这五项都通过,就可以说实验真正跑通了。

5.4 进阶方向:从单机实验到集群部署的思维迁移

伪分布式实验的价值不仅仅在于“完成一门课的作业”,它其实是通往真实集群部署的一块跳板。单机伪分布式和真实集群在原理上共享同一套配置体系,区别只在于把几个角色拆到多台机器上。

伪分布式改成完全分布式集群时,只需要把hdfs-site.xml里的副本数改回 3,把core-site.xml里的hdfs://localhost:9000换为集群主节点的 hostname 或 IP,再加上yarn-site.xml里的 ResourceManager 配置和workers文件里换行写从节点主机名,本质骨架和实验完全一致。对课程实验来说,基于这份实验报告去理解后面的 HDFS 读写机制和 MapReduce 流程,会比直接上手分布式集群顺利得多。

另外值得多说一句的是,实验报告里用到的 HDFS-mkdir -p /user/hadoop命令,在真实集群里同样有效,因为 HDFS 没有“根目录自动创建用户目录”的逻辑。首次部署时给每个业务用户建 HDFS 用户目录是一个常规操作,不要用 root 跑所有任务,这个习惯从实验阶段就值得培养。

从我自己的经历来看,第一次配 Hadoop 时以为配置文件写对了就能直接跑起来,结果卡在 JAVA_HOME 一个下午。从那以后我每次在新机器上配 Hadoop,都强制自己先执行echo $JAVA_HOME && ls /usr/lib/jvm,确认路径真实存在再往下走。这种“先查环境再改配置,改完配置再启动,启动失败看日志不看人”的习惯,比记住任何一条命令都重要。希望这份拆解能帮你在交实验报告之前多几分底气,也为你后面啃 HDFS 和 MapReduce 留一条顺畅的路。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询