简介:《大数据原理与技术》课程实验报告完整版,聚焦实验一“熟悉常用的 Linux 操作和 Hadoop 操作”,面向正在学习大数据课程、需要完成同类实验作业或夯实基础操作的学生。资源为单个 docx 文档,大小 3.29MB,内含实验目的、实验平台、详细操作步骤与命令示例,结构清晰,可直接参照。目前已有 5241 人学习下载,被广泛用于大数据课程实验参考。报告从 Linux 虚拟机安装入手,系统梳理了 cd、ls、mkdir、rmdir、cp、mv、rm、cat、tac、more、head、tail、touch、chown、find、tar、grep 等常用命令的典型用法,并完整演示了 Hadoop 伪分布式环境的搭建,包括配置文件修改、NameNode 格式化、环境变量配置及守护进程启动,最后通过 WordCount 实例验证环境运行正常。读者既可据此快速完成实验报告,也能按图索骥复现练习,加深对 Linux 操作和 Hadoop 基础原理的理解,提升大数据实验效率。
1. 大数据入门第一步不是写代码:这份实验报告把Linux和Hadoop环境一次讲透
拆这份《大数据原理与技术课程实验报告》完整版之前,我本来以为里面会是什么高深的MapReduce调优,翻完才发现,真正卡住大半新人的,其实是那些看着简单、一上手就翻车的环境操作:虚拟机装好了上不了网、Hadoop一启动就报JAVA_HOME没配、好不容易起来又发现Web页面打不开。这份报告把「Linux常用命令 + Hadoop伪分布式搭建 + HDFS基础操作」完整串了一遍,每个命令都带操作对象和结果验证,是照着就能跑通的实验闭环。适合正在上大数据课程、需要交实验报告的学生,也适合想自己从零把Hadoop环境捋顺的从业者。报告里踩过的坑和解决办法,就是最实在的避坑清单。
2. 搭出能跑Hadoop的Linux环境:VirtualBox、Ubuntu 16.04与网络配置
实验平台用的是VirtualBox + Ubuntu Kylin 16.04。很多同学看到这个版本会觉得老,但Hadoop生态的教材配套基本都锚定在16.04上,教程里截图、路径、软件源都与之一一对应。用新版Ubuntu不是不行,只是你踩的坑会多一些:比如OpenJDK版本变化、systemd的管理差异、apt源失效。如果你只是想快速把实验跑通,老老实实按16.04来最省时间。下面按报告里的顺序,把安装链路拆清楚。
2.1 为什么选 Ubuntu 16.04:教材、Hadoop 版本与坑的对应关系
这份报告对应的Hadoop实验,教材推荐系统是Ubuntu 16.04,而Hadoop 3.1.3在16.04上有大量现成的安装文档,遇到问题能很容易搜到对应解法。换成20.04或22.04,很多路径没变,但apt源、默认Python版本、网卡命名规则都变了,教程里的命令照敲大概率会报错。
需要注意的是,Ubuntu 16.04的官方源在2021年已经停止维护,直接apt update会报404。常见的做法是换成国内镜像源。执行前先备份原始源文件,这是个好习惯:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list sudo apt update第一行备份,第二行把官方源地址替换成清华镜像,第三行更新索引。替换后apt就能正常用了。如果你装了新版Ubuntu,这个步骤可以跳过,但后面Hadoop配置文件里的路径、权限设置反而可能因为系统差异变得更折腾,所以按报告走16.04,性价比最高。
2.2 VirtualBox 安装与虚拟机创建参数:分配多少内存、磁盘怎么给
报告里的宿主机器是i5-10300H处理器加16GB内存,这个配置跑虚拟机绰绰有余。创建虚拟机时,几个关键参数直接决定后面Hadoop能不能跑起来:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 内存 | 至少2GB,推荐4GB | Hadoop伪分布式会同时起多个JVM进程,内存太小吃不下 |
| 磁盘 | 动态分配,20GB | Ubuntu系统加Hadoop安装包,20GB够用 |
| 显存 | 16MB | Ubuntu桌面版默认即可 |
| 网络 | NAT + 桥接 | NAT保证能上网,桥接用于局域网互访 |
磁盘选动态分配,一开始只占很小空间,随着使用慢慢增长,不会一次性从宿主硬盘划走20GB。内存如果只有8GB宿主机,虚拟机给2GB也能跑,但wordcount任务会明显变慢。我一般会建议在虚拟里关掉Ubuntu的动画特效,给桌面交互留一点余量。
2.3 虚拟机网络配置:从「不能上网」到「能联网」的排查链路
报告里明确记录了一个问题:Ubuntu安装完成后不能上网。原因看起来是「选择正确的网卡名称」,实际上背后是VirtualBox桥接网卡的选择逻辑。宿主机如果同时有有线网卡和无线网卡,VirtualBox默认桥接的网卡可能不是当前正在联网的那块。
先确认宿主机当前用的哪个网卡。Windows下在「控制面板→网络连接」里看,状态显示「已连接」的那个就是。报告里两块网卡分别是Realtek有线网卡和MediaTek Wi-Fi 6无线网卡,如果当前连着Wi-Fi,桥接模式必须选MT7921。配置完虚拟机内再验证:
ip addr ping -c 4 www.baidu.com第一条命令查看虚拟机网卡是否拿到IP,如果只有lo回环地址,说明网卡没起来;第二条命令测试外网连通性。如果ping不通,先检查VirtualBox里网卡是否勾选了「接入网线」,再确认桥接的还是NAT模式。折腾网络时最容易忘记的,是改完设置后要在虚拟机里重启网络服务:
sudo service networking restart2.4 安装增强功能与分辨率调整:安装界面显示不全的解法
安装Ubuntu时最容易碰上的第一个翻车点,是安装界面分辨率太小,窗口超出屏幕,按钮点不到。报告里给的方法是:先用Win键加鼠标拖动窗口,把安装程序挪到能看到按钮的位置,完成安装后再装增强功能。
增强功能是VirtualBox让虚拟机实现自适应分辨率、共享剪贴板的关键组件。装之前需要先装编译依赖,否则安装脚本会失败:
sudo apt install build-essential dkms sudo mount /dev/cdrom /mnt cd /mnt && sudo ./VBoxLinuxAdditions.run第一行安装编译Linux内核模块所需的包,第二行把VirtualBox的增强功能光盘挂载到/mnt,第三行执行安装脚本。装完重启虚拟机,在「系统设置→显示」里就能把分辨率调成和窗口一样大了。这里有个小坑:Ubuntu 16.04的内核版本和VirtualBox版本如果不匹配,增强功能可能装不上,这时候优先升级VirtualBox到较新版本,而不是去降级Ubuntu内核,后者风险大得多。
3. Linux命令这条线:18个高频命令的用法、边界与权限陷阱
报告第二部分列了18个常用Linux命令,从cd到grep,几乎覆盖了后续Hadoop操作会用到的全部动作。这些命令看着简单,但有几个容易翻车的细节:rmdir只能删空目录、head -n -50 与 tail -n +50 的正负号含义正好相反、cp复制目录必须加-r。下面按功能分组,把每个命令的适用场景和坑位标出来。
3.1 目录与文件操作:cd、ls、mkdir、rmdir 的递归细节
# 进入 /usr/local 目录 cd /usr/local # 进入上一级目录 cd .. # 回到当前用户主目录 cd ~ # 列出 /usr 下的所有文件和目录 ls /usr # 递归创建多级目录 mkdir -p a1/a2/a3/a4 # 递归删除空目录(连同路径内空目录一起) rmdir -p a1/a2/a3/a4cd /usr/local 是绝对路径定位,cd .. 是相对路径回退,cd ~ 则回到当前登录用户自己的主文件夹,不是root的/root,普通用户时是/home/用户名。mkdir -p 的作用是逐级创建父目录,如果a1已经存在不会报错,很适合一次建多级目录。rmdir 默认只能删空目录,目录里有任何文件都会提示删除失败;想要连同路径里的空目录一起删,就用 -p 参数。实验里还有个细节,命令是「ls –al」,终端里必须用半角连字符和字母,别从PDF里复制出全角破折号。
3.2 复制移动删除:cp、mv、rm 的权限陷阱
# 复制主目录下的 .bashrc 到 /usr 并重命名为 bashrc1 sudo cp ~/.bashrc /usr/bashrc1 # 递归复制目录 sudo cp -r /tmp/test /usr # 移动文件到 /usr/test 目录 sudo mv /usr/bashrc1 /usr/test # 重命名目录 sudo mv /usr/test /usr/test2 # 删除文件 sudo rm /usr/test2/bashrc1 # 删除非空目录 sudo rm -R /usr/test2复制到/usr目录必须加sudo,因为/usr只允许root用户写。cp复制目录时-r不能省,不加-r会提示「omitting directory」,直接跳过。mv同时承担移动和重命名两个职责:目标路径是已存在的目录,就执行移动;目标路径不存在,就执行重命名。实验里先把bashrc1移动到/usr/test,又把test重命名为test2,本质上都是mv。rm -R 里的-R也可以用小写-r,作用一样,都是递归删除非空目录。删除操作没有后悔药,执行前最好先ls确认路径,尤其是带通配符的时候。
3.3 文件查看五件套:cat、tac、more、head、tail 的适用场景
# 正向查看全部内容 cat ~/.bashrc # 反向查看全部内容(从最后一行开始显示) tac ~/.bashrc # 分页查看,空格翻页,q退出 more ~/.bashrc # 只看前20行 head -n 20 ~/.bashrc # 不要最后50行,只看前面部分 head -n -50 ~/.bashrc # 只看最后20行 tail -n 20 ~/.bashrc # 从第50行开始显示,直到文件末尾 tail -n +50 ~/.bashrchead和tail最容易记混的是带正负号的行号。head -n -50 表示「排除末尾50行」,输出前面剩下的内容;tail -n +50 表示「从第50行开始输出」,看到的其实是第50行到结尾。一个管头,一个管尾,符号方向相反。cat适合直接看小文件,tac适合反向核对日志,more在文件很大时一页页翻,避免刷屏。实际工作中tail -f 查看实时日志是高频操作,实验报告里没提,但理解和tail -n 是同一个命令族。
3.4 查找、压缩、权限与字符串:find、tar、grep、chown、touch
# 创建空文件并查看时间属性 touch /tmp/hello ls -l /tmp/hello # 修改文件时间为5天前 touch -d "5 days ago" /tmp/hello # 查找主目录下名为 .bashrc 的文件 find ~/.bashrc # 创建 /test 目录并打包成 test.tar.gz sudo mkdir /test sudo tar -zcv -f /test.tar.gz test # 解压 test.tar.gz 到 /tmp 目录 sudo tar -zxv -f /test.tar.gz -C /tmp # 从文件中查找字符串 examples grep examples ~/.bashrc # 修改文件所有者为 root sudo chown root /tmp/hellotouch主要两个用途:创建空文件、更新文件时间戳。-d "5 days ago" 可以直接把时间改到过去,实验里用来模拟旧文件。find的常见用法是按名称搜索,比如 find ~ -name ".bashrc",报告里写的是 find ~/.bashrc,这只是精确路径查询,学完可以顺手扩展成真正的搜索。tar参数里z表示gzip压缩,c是创建归档,v是显示过程,f是指定文件名,四个连在一起写要小心顺序;解压时c换成x。最后一个-C参数指定解压目标目录,不加就解压到当前目录。grep是最基础的字符串检索,后面查日志报错信息时全靠它,chown改文件所有者时,如果对root不熟悉,慎用,改完普通用户可能失去写入权限。
3.5 环境变量配置:JAVA_HOME 的配置与生效验证
# 编辑环境变量文件 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配置环境变量最常见的错误是照抄路径。JAVA_HOME必须改成自己机器上JDK实际解压目录,你可以先执行 ls /usr/lib/jvm 看看目录名是什么再填。CLASSPATH开头的点号代表当前目录,去掉之后java运行时可能找不到当前目录下的类。PATH里追加了 ${JAVA_HOME}/bin,同时又保留了 $PATH,这样java命令优先走新装的JDK,系统原有命令不受影响。配完后不执行source,当前终端是不会读取新配置的,这也是很多新手说「明明改了为什么没用」的原因。
4. Hadoop伪分布式实战:从解压到WordCount跑通的完整命令链
Hadoop 3.1.3伪分布式意味着NameNode、DataNode、SecondaryNameNode都跑在同一台机器上,对学习来说完全够用。整个链路分为:解压安装、写配置、格式化、启动、跑WordCount、做HDFS文件操作。每一步都有明确的验证方式,照着敲完,环境就是真的通了。
4.1 解压与配置 core-site.xml、hdfs-site.xml
cd /usr/local sudo tar -zxvf /path/to/hadoop-3.1.3.tar.gz sudo mv hadoop-3.1.3 hadoop sudo chown -R $USER:$USER hadoop把Hadoop解压后放到/usr/local/hadoop,这是教材里约定俗成的安装路径。最后一步chown很关键,它把hadoop目录所有权交给当前用户,否则后面执行./bin/hdfs格式化时会因为写不进目录而失败。接下来改两个配置文件。
core-site.xml 里指定NameNode地址:
<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> </configuration>伪分布式只有一台机器,副本数必须写成1,保持默认的3会让DataNode在写数据时找不到其他节点而频繁报副本不足的警告。fs.defaultFS指向localhost:9000,这个端口是NameNode的RPC通信端口,后面所有HDFS操作都要走这里。
4.2 格式化NameNode与启动守护进程
cd /usr/local/hadoop ./bin/hdfs namenode -format ./sbin/start-dfs.sh jpsformat是初始化HDFS的元数据,相当于给文件系统刻了个初始状态。执行完会看到一堆日志,最后出现「successfully formatted」字样才算成功。start-dfs.sh会依次启动NameNode、DataNode和SecondaryNameNode。启动完用jps验证进程,正常情况下输出里应该有三个角色名称。
提示:format只需要做一次。重复格式化前必须清理DataNode的数据目录,否则集群ID不一致,DataNode会启动后自动退出。这个坑在下一章细说。
4.3 跑通WordCount:命令格式与参数边界
报告里用Hadoop自带的WordCount统计LICENSE.txt里单词出现次数:
cd /usr/local/hadoop ./bin/hadoop jar \ ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar \ wordcount input output这段命令的参数拆开看:jar后的第一个路径是示例jar包位置;wordcount是程序入口类名;input是输入目录;output是输出目录。注意output必须不存在,程序会自动创建,如果第二次运行不删掉旧output,会直接报文件已存在。输入写成目录时,程序会自动读取目录下所有文件。统计结果生成在output/part-r-00000里。
如果LICENSE.txt不在HDFS里,需要先建输入目录并上传:
./bin/hdfs dfs -mkdir input ./bin/hdfs dfs -put LICENSE.txt input4.4 HDFS基础操作:mkdir、put、get、ls
# 在HDFS中创建用户目录 ./bin/hdfs dfs -mkdir -p /user/hadoop # 在/user/hadoop下创建test目录 ./bin/hdfs dfs -mkdir test # 把本地文件上传到HDFS的test目录 ./bin/hdfs dfs -put ~/.bashrc test # 列出test目录内容,验证上传成功 ./bin/hdfs dfs -ls test # 把HDFS里的test整个目录拉回本地 ./bin/hdfs dfs -get test ./这一组操作对标Linux本地文件操作,只是命令前缀换成了./bin/hdfs dfs。-mkdir -p支持递归创建,-put是上传,-get是下载,-ls是列目录。HDFS里没有cd命令,所有路径都得写相对当前用户目录的路径或者绝对路径。初次创建/user/hadoop是给自己建home目录,后面再执行dfs命令时,默认位置就在这个目录下。
5. 避坑指南:新手装Hadoop高频翻车点与解决方案
这一章把实验报告里明确遇到的问题,加上我复现时补充的经典坑,统一按「现象 → 原因 → 解决」整理。这些坑占了新手大部分排查时间,值得放大镜式看。
5.1 安装界面分辨率太小,按钮点不到
现象:VirtualBox安装Ubuntu时,安装窗口超出屏幕边界,确认按钮显示不全,鼠标怎么拖都拖不到。 原因:虚拟机默认显示分辨率太低,且未安装增强功能时窗口不会随宿主窗口自适应。 解决:安装阶段用Win键加鼠标左键拖动窗口,把安装按钮挪到可视区域;系统装完后,执行:
sudo apt install build-essential dkms sudo mount /dev/cdrom /mnt cd /mnt && sudo ./VBoxLinuxAdditions.run sudo reboot装完增强功能重启,就能在显示设置里调分辨率了。
5.2 虚拟机无法上网
现象:桥接网络模式下,虚拟机里ping www.baidu.com不通,apt update也一直报错。 原因:宿主机器上有多块网卡,VirtualBox桥接时选错了网卡。报告里宿主机同时有Realtek有线网卡和MediaTek无线网卡,当前实际用的是无线网卡,桥接却选到了有线网卡,网络根本没走到活跃链路。 解决:先看宿主机「网络连接」里哪块网卡显示已连接,然后在VirtualBox设置→网络→桥接网卡里换成对应的网卡名称。如果还不行,直接切回NAT模式,NAT模式下虚拟机能访问外网,只是局域网内其他机器访问不了虚拟机,做实验足够用。
5.3 启动Hadoop报 JAVA_HOME is not set
现象:执行start-dfs.sh时输出「ERROR: JAVA_HOME is not set and could not be found.」 原因:hadoop-env.sh里的JAVA_HOME还是占位符${JAVA_HOME},脚本执行环境里又没把这个变量导出来,属于配置没落地。 解决:编辑/usr/local/hadoop/etc/hadoop/hadoop-env.sh,把占位符改成绝对路径:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162这里路径要替换成自己机器的真实JDK目录。改完重新执行start-dfs.sh。我一般会顺手在终端先执行 echo $JAVA_HOME 确认变量有效,再启动集群,避免白折腾。
5.4 重复格式化NameNode导致DataNode启动异常
现象:DataNode进程启动后立即退掉,日志里出现namespaceID不一致的报错,NameNode正常但文件系统读写失败。 原因:每次hdfs namenode -format都会把集群ID重新生成。而DataNode本地数据目录里存着旧ID,启动时校验不过,直接放弃启动。这是伪分布式搭建的经典连环坑。 解决:格式化之前,清掉DataNode的数据目录。默认数据目录在/tmp/hadoop-当前用户名下,格式化前强制清理:
rm -rf /tmp/hadoop-$(whoami)然后重新执行format,再start-dfs.sh。从那以后,我每次格式化前都会先看一眼/tmp下面残留的hadoop目录,能删就先删,少了一次翻车。
5.5 Web界面打不开或端口不对
现象:jps能看到NameNode进程,但浏览器访问localhost:50070一直没响应。 原因:Hadoop 3.x把NameNode的Web UI端口从2.x时代的50070改成了9870,你还在按老教程访问旧端口。 解决:换成 http://localhost:9870 访问。如果还是打不开,检查系统防火墙:
sudo ufw status状态是active时,放行9870端口,或者临时关闭防火墙做验证。伪分布式环境下,多数时候是端口记错,不是防火墙问题。
6. 把实验报告变成自己的东西:三个验证习惯与一条学习线
实验报告跑完不是终点,要让它真正内化成自己的技能,得养成三个验证习惯。第一,WordCount跑完后,别只看终端里的进度条,要实际看结果文件:
./bin/hdfs dfs -cat output/part-r-00000 | head这条命令把HDFS上的结果文件打印出来并截取前几行,看到单词和次数才叫真的跑通。第二,每次启动集群后都用jps核对进程,NameNode、DataNode、SecondaryNameNode三个都在才算正常,少任何一个都说明环境有问题。第三,把这次实验里所有踩过的坑和对应命令整理成一篇自己的环境笔记,包括JAVA_HOME绝对路径、format前清理/tmp/hadoop-*目录、3.x端口是9870这类记录。我后来搭真实集群时,就是靠这些笔记避开了大版本升级带来的隐性变化。
这份实验报告其实是完整大数据学习路线的起点。跑通WordCount之后,按「HDFS权限与快照 → MapReduce编程实践 → YARN资源调度 → 数据仓库Hive → 数据大屏可视化」的顺序继续推进。做数据大屏不只是前端展示,底层数据的流转链路就是从HDFS或Hive把统计结果查出来,再落到可视化框架里,你现在打通的这条HDFS命令链,是整条链路的地基。
从那以后,我每次搭大数据环境,都强制自己走一遍「写环境笔记 → 记录资源路径 → 备份关键配置 → 再动手」的流程。这个习惯帮我省下过不知道多少查错时间。希望帮到你。
本文还有配套的精品资源,点击获取