云计算实验实操|Hadoop伪分布式部署+MapReduce编程实践(超详细图文版)
前言
前两篇博客分享了OpenStack Keystone和CloudSim的实验实操,这篇继续更新云计算核心实验的后两个环节------Hadoop 3.2.4伪分布式集群部署 和MapReduce编程实践。
Hadoop作为大数据生态的基石,伪分布式部署是理解分布式文件系统与计算模型的入门必做内容;而MapReduce的WordCount示例,则是验证Hadoop功能、理解分布式计算流程的经典实操。本次实验全程基于Ubuntu 20.04 LTS系统完成,踩过的坑和解决方法都整理在文中,跟着做就能顺利完成实验~
实验三:Hadoop伪分布式集群部署
实验简介
Hadoop是Apache基金会开发的开源分布式计算框架,核心由**HDFS(分布式文件系统)和MapReduce(分布式计算模型)**组成,本次实验完成单机伪分布式部署,所有进程运行在同一台虚拟机上,模拟分布式集群的运行逻辑,为后续MapReduce实验奠定基础。
实验环境
- 硬件:虚拟机(2核CPU、4GB内存、40GB硬盘),宿主机为普通台式机/笔记本
- 软件:Ubuntu 20.04 LTS 64位、OpenJDK 8、Hadoop 3.2.4、vim编辑器、SSH工具
完整实操步骤
1. 前置准备:安装JDK 8(Hadoop指定适配版本)
Hadoop 3.2.4必须搭配JDK 8,高版本会出现兼容性问题,执行以下命令安装并验证:
bash
# 更新软件源
apt update && apt upgrade -y
# 安装OpenJDK 8精简版
apt install openjdk-8-jdk-headless -y
# 验证Java版本,输出1.8.0系列即成功
java -version
2. 配置SSH免密登录(Hadoop进程通信必备)
Hadoop的NameNode、DataNode等进程需要通过SSH本地通信,需配置免密登录:
bash
# 生成SSH密钥对(一路回车到底)
ssh-keygen -t rsa
# 将公钥添加到授权列表
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 设置文件权限
chmod 644 ~/.ssh/authorized_keys
# 测试免密登录,无需输入密码即成功
ssh localhost
# 退出SSH连接
exit
3. 部署Hadoop 3.2.4安装包
提前下载好的安装包直接解压,无需手动下载:
bash
# 切换到安装包所在目录(以Downloads为例)
cd /home/你的用户名/Downloads
# 解压到/usr/local目录
tar -zxvf hadoop-3.2.4.tar.gz -C /usr/local
# 回到root家目录
cd /root
4. 配置环境变量
bash
vim ~/.bashrc
在文件末尾添加以下内容:
bash
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HADOOP_HOME=/usr/local/hadoop-3.2.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存退出后,执行source ~/.bashrc生效环境变量。
5. 修改核心配置文件
(1)修改hadoop-env.sh(指定Java路径)
bash
vim /usr/local/hadoop-3.2.4/etc/hadoop/hadoop-env.sh
在文件末尾添加:
bash
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
(2)修改core-site.xml(指定HDFS默认文件系统)
bash
vim /usr/local/hadoop-3.2.4/etc/hadoop/core-site.xml
替换内容:
xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/data/hadoop</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
</configuration>
(3)修改hdfs-site.xml(指定SecondaryNameNode地址)
bash
vim /usr/local/hadoop-3.2.4/etc/hadoop/hdfs-site.xml
替换内容:
xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>localhost:9868</value>
</property>
</configuration>
(4)修改mapred-site.xml(指定MapReduce运行框架与环境)
bash
vim /usr/local/hadoop-3.2.4/etc/hadoop/mapred-site.xml
替换内容:
xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.2.4</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.2.4</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.2.4</value>
</property>
</configuration>
(5)修改yarn-site.xml(配置YARN资源调度)
bash
vim /usr/local/hadoop-3.2.4/etc/hadoop/yarn-site.xml
替换内容:
xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
6. 格式化HDFS(仅执行一次!)
bash
hdfs namenode -format
执行后无红色报错,即格式化成功。
7. 启动Hadoop集群并验证
bash
# 启动所有服务
start-all.sh
# 查看Java进程
jps
成功标志:终端输出NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager、Jps进程,无进程缺失。
实验三常见问题及解决方法
- 问题1:运行MapReduce示例报错"Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster"
解决方法:在mapred-site.xml中添加3项环境配置,指定HADOOP_MAPRED_HOME路径,重启集群即可解决。 - 问题2:SSH免密登录失败,提示"Host key verification failed"
解决方法:重新生成密钥对并添加授权,执行ssh-keygen -t rsa和cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys,修复文件权限。 - 问题3:Hadoop启动后ResourceManager进程未出现
解决方法:检查yarn-site.xml配置,确认yarn.resourcemanager.hostname设置为localhost,重启YARN服务。
实验四:MapReduce编程实践(WordCount单词统计)
实验简介
MapReduce是Hadoop提供的分布式并行计算框架,本次实验通过运行官方自带的WordCount示例,验证Hadoop集群的计算功能,理解MapReduce"Map-Shuffle-Reduce"的执行流程,是掌握分布式计算模型的入门实操。
实验环境
- 硬件:同实验三(虚拟机2核4G即可)
- 软件:Ubuntu 20.04 LTS 64位、Hadoop 3.2.4伪分布式集群、HDFS文件系统
完整实操步骤
1. 前置准备:确保Hadoop集群正常运行
执行jps命令,确认所有核心进程(NameNode、DataNode、ResourceManager等)正常运行,若进程缺失,重启集群:
bash
stop-all.sh
start-all.sh
2. 在HDFS创建输入目录
bash
hadoop fs -mkdir -p /input
3. 上传测试文件到HDFS
使用Hadoop自带的README.txt作为测试文件:
bash
hadoop fs -put /usr/local/hadoop-3.2.4/README.txt /input
# 验证文件是否上传成功
hadoop fs -ls /input
4. 运行WordCount单词统计任务
bash
# 进入MapReduce示例目录
cd /usr/local/hadoop-3.2.4/share/hadoop/mapreduce
# 运行WordCount任务,指定输入/输出路径
hadoop jar hadoop-mapreduce-examples-3.2.4.jar wordcount /input /output
执行成功标志:终端输出Map 100%、Reduce 100%,无红色报错。
5. 查看统计结果
bash
# 查看输出目录文件
hadoop fs -ls /output
# 查看单词统计结果
hadoop fs -cat /output/part-r-00000
终端会输出文件中每个单词及其出现次数,任务执行完成。
实验四常见问题及解决方法
- 问题1:提交任务时提示"/output目录已存在"
解决方法:MapReduce任务的输出目录必须不存在,执行hadoop fs -rm -r /output删除旧目录后,重新提交任务。 - 问题2:任务运行失败,提示"无法连接ResourceManager"
解决方法:检查ResourceManager进程是否正常运行,若进程缺失,重启YARN服务,确认yarn-site.xml配置正确。 - 问题3:查看结果时提示"文件不存在"
解决方法:确认任务执行成功,输出文件已生成,执行hadoop fs -ls /output验证文件存在,再使用hadoop fs -cat查看结果。
两个实验核心收获与总结
1. 实操能力提升
- 熟练掌握Hadoop伪分布式集群的部署流程,包括JDK适配、SSH免密配置、核心文件修改、集群启停等关键操作;
- 掌握HDFS常用命令,包括目录创建、文件上传/下载、结果查看等,熟悉分布式文件系统的操作逻辑;
- 学会MapReduce任务的提交、监控与结果查看,理解YARN资源调度的基本流程,提升分布式计算实操能力。
2. 核心原理认知
- 理解Hadoop的核心架构:HDFS作为分布式存储载体,YARN作为资源调度中枢,MapReduce作为分布式计算模型,三者协同实现海量数据的存储与处理;
- 理解MapReduce的执行流程:Map阶段拆分数据为键值对、Shuffle阶段按Key分组、Reduce阶段汇总结果,掌握分布式计算"分而治之"的核心思想;
- 认识到分布式系统部署的关键原则:版本适配是基础、配置精准是核心、进程验证是保障,一个参数错误或路径配置不当,都会导致集群或任务失败。
3. 实操避坑指南
- 版本适配避坑:Hadoop 3.2.4必须搭配JDK 8,高版本会出现兼容性问题,部署前需严格验证Java版本;
- 文件路径避坑:MapReduce任务的输出目录必须不存在,否则任务启动失败,提交前需删除旧目录;
- 进程验证避坑:集群启动后需通过jps命令验证所有核心进程,避免因进程缺失导致任务失败;
- 配置文件避坑:修改配置文件时,需注意XML格式规范,避免拼写错误或标签遗漏,修改后需重启集群生效。
写在最后
这两个实验是大数据技术入门的核心实操,Hadoop伪分布式部署让我理解了分布式系统的架构与运行逻辑,MapReduce实践则让我直观感受到了分布式计算的流程与优势。实操过程中踩的坑,都是理解分布式技术的宝贵经验。
对于刚入门大数据的小伙伴,建议先完成伪分布式部署,理解Hadoop的核心原理,再尝试MapReduce编程,循序渐进,避免因步骤混乱导致实验卡顿。后续会继续分享Hive、Spark等大数据生态组件的实验内容,感兴趣的小伙伴可以关注~
如果本文对你有帮助,欢迎点赞+收藏+评论,一起交流大数据学习心得~
附:实验相关参考资料
- Apache Hadoop官方文档:https://hadoop.apache.org/docs/
- Hadoop 3.x伪分布式部署指南:https://hadoop.apache.org/docs/r3.2.4/hadoop-project-dist/hadoop-common/SingleCluster.html
- MapReduce WordCount示例说明:https://hadoop.apache.org/docs/r3.2.4/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html