ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

大数据入门:Linux与Hadoop伪分布式环境搭建避坑指南

大数据入门:Linux与Hadoop伪分布式环境搭建避坑指南 简介《大数据原理与技术》课程实验报告完整版聚焦实验一“熟悉常用的 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推荐4GBHadoop伪分布式会同时起多个JVM进程内存太小吃不下磁盘动态分配20GBUbuntu系统加Hadoop安装包20GB够用显存16MBUbuntu桌面版默认即可网络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.xmlcd /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 namefs.defaultFS/name valuehdfs://localhost:9000/value /property /configurationhdfs-site.xml 里设置副本数configuration property namedfs.replication/name value1/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命令链是整条链路的地基。从那以后我每次搭大数据环境都强制自己走一遍「写环境笔记 → 记录资源路径 → 备份关键配置 → 再动手」的流程。这个习惯帮我省下过不知道多少查错时间。希望帮到你。本文还有配套的精品资源点击获取
返回列表