目录
-
- [一. 配置静态网络](#一. 配置静态网络)
- [二. 配置主机名与IP地址映射](#二. 配置主机名与IP地址映射)
- [三. 配置SSH免密登录](#三. 配置SSH免密登录)
- [四. 配置Java和Hadoop环境](#四. 配置Java和Hadoop环境)
- [五. 配置Hadoop伪分布式](#五. 配置Hadoop伪分布式)
- [六. 启动与验证](#六. 启动与验证)
一. 配置静态网络
原因:Hadoop集群依赖稳定的网络通信,动态IP可能导致节点失联。静态IP确保节点始终通过固定地址通信。
操作步骤:
bash
# 修改网络配置文件
sudo vim /etc/network/interfaces
# 添加内容(根据实际网络修改):
auto eth0
iface eth0 inet static
address 192.168.238.150
netmask 255.255.255.0
gateway 192.168.238.2
# 断开网络
sudo systemctl stop networking
# 修改dns文件
sudo vim /etc/resolv.conf
# 添加内容(根据实际网络修改)
nameserver 192.168.238.2
# 启动网络
sudo systemctl start networking
二. 配置主机名与IP地址映射
原因:通过主机名代替IP,提高配置可读性。
操作步骤:
bash
# 修改主机名
sudo hostnamectl set-hostname hadoop
# 修改hosts文件
sudo vim /etc/hosts
# 添加映射(根据实际情况修改):
192.168.238.150 hadoop
# 重启生效
reboot
三. 配置SSH免密登录
原因:Hadoop节点间需频繁通信,免密登录简化操作并支持自动化任务。
操作步骤:
bash
# 生成密钥对(一路回车)
ssh-keygen -t rsa
# 将公钥拷贝到本机
ssh-copy-id hadoop # 本机
# 测试免密登录
ssh hadoop
四. 配置Java和Hadoop环境
原因:Hadoop基于Java开发,依赖JVM运行;环境变量使在终端识别命令。
jdk8官方下载
hadoop3.4.1官方下载
操作步骤:
bash
# 分别解压jdk8和hadoop
tar -zxvf
# 配置环境变量
vim ~/.zshrc
# 添加以下内容:
export JAVA_HOME=/soft/java1.8 # jdk8安装路径
export HADOOP_HOME=/soft/hadoop-3.4.1 # Hadoop安装路径
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 生效配置
source ~/.zshrc
五. 配置Hadoop伪分布式
关键配置文件修改:
bash
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
# 设置JAVA_HOME
export JAVA_HOME=/soft/java1.8 # jdk8安装路径
- core-site.xml
xml
<!-- Hadoop核心配置文件 -->
<configuration>
<!-- 定义Hadoop文件系统的默认URI -->
<property>
<!--
NameNode的访问地址和端口:
- 协议:hdfs:// 表示HDFS协议
- hadoop: 主机名(需与/etc/hosts中的映射一致)
- 9000: NameNode的默认RPC通信端口
-->
<name>fs.defaultFS</name>
<value>hdfs://hadoop:9000</value>
</property>
<!-- 定义Hadoop临时存储目录 -->
<property>
<!--
作用:
- 存放NameNode、DataNode等组件的运行时数据
- 必须预先创建目录并设置权限(建议755)
注意:
- 路径中的 /soft/hadoop-3.4.1 需与实际安装路径一致
- 如果目录不存在会导致Hadoop启动失败
-->
<name>hadoop.tmp.dir</name>
<value>/soft/hadoop-3.4.1/data/hadoop_tmp</value>
</property>
</configuration>
- hdfs-site.xml
xml
<!-- HDFS分布式文件系统配置文件 -->
<configuration>
<!-- 定义HDFS文件块的副本数量 -->
<property>
<!--
作用:
- 控制HDFS中每个数据块的副本数(默认3)
- 伪分布式环境下只能设置为1(单节点无法生成多副本)
注意:
- 生产环境中通常设置为3以保证数据冗余
-->
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- 定义NameNode元数据存储目录 -->
<property>
<!--
作用:
- 存储HDFS文件系统的元数据:
* 文件系统命名空间(fsimage)
* 编辑日志(edits)
重要:
- 必须预先创建目录并设置权限(建议755)
- 该目录内容丢失会导致HDFS数据不可恢复
-->
<name>dfs.namenode.name.dir</name>
<value>/soft/hadoop-3.4.1/data/hadoop_data/dfs/namenode</value>
</property>
<!-- 定义DataNode数据块存储目录 -->
<property>
<!--
作用:
- 存储实际的数据块内容
- 每个DataNode可以有多个存储目录(用逗号分隔)
注意:
- 目录结构会自动生成(version子目录等)
- 磁盘空间不足会导致DataNode异常
-->
<name>dfs.datanode.data.dir</name>
<value>/soft/hadoop-3.4.1/data/hadoop_data/dfs/datanode</value>
</property>
</configuration>
- mapred-site.xml
xml
<!-- MapReduce任务调度与历史服务配置文件 -->
<configuration>
<!-- 指定MapReduce运行框架 -->
<property>
<!--
作用:
- 设置MapReduce作业的运行时框架为YARN
- 可选值:local(本地模式), classic(旧版MR1框架), yarn(YARN框架)
注意:
- Hadoop 3.x 必须设置为yarn才能使用资源调度
-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 配置MapReduce ApplicationMaster环境变量 -->
<property>
<!--
作用:
- 定义ApplicationMaster进程的环境变量
- $HADOOP_HOME需要替换为实际路径(建议直接写绝对路径)
示例:
<value>HADOOP_MAPRED_HOME=/opt/hadoop</value>
-->
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<!-- 配置Map任务环境变量 -->
<property>
<!--
作用:
- 定义所有Map任务执行时的环境变量
- 确保Map任务能正确访问Hadoop库
-->
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<!-- 配置Reduce任务环境变量 -->
<property>
<!--
作用:
- 定义所有Reduce任务执行时的环境变量
- 与Map任务配置同理
-->
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<!-- 历史服务器RPC地址 -->
<property>
<!--
作用:
- 历史服务器(JobHistory Server)的RPC通信地址
- hadoop为主机名(需在/etc/hosts中配置解析)
- 10020为默认RPC端口
注意:
- 需启动服务:mapred --daemon start historyserver
-->
<name>mapreduce.jobhistory.address</name>
<value>hadoop:10020</value>
</property>
<!-- 历史服务器Web界面地址 -->
<property>
<!--
作用:
- 历史服务器的HTTP访问地址
- 默认端口19888
访问方式:
- http://hadoop:19888
-->
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop:19888</value>
</property>
<!-- 历史服务器HTTPS地址 -->
<property>
<!--
作用:
- 历史服务器的HTTPS安全访问地址
- 默认端口19890
注意:
- 需要配置SSL证书才能启用
-->
<name>mapreduce.jobhistory.webapp.https.address</name>
<value>hadoop:19890</value>
</property>
</configuration>
- yarn-site.xml
xml
<!-- YARN NodeManager 辅助服务配置 -->
<configuration>
<!-- 定义NodeManager需要启用的附加服务 -->
<property>
<!--
关键作用:
- 指定NodeManager支持的辅助服务类型
- mapreduce_shuffle 是MapReduce作业的专用Shuffle服务
技术细节:
- Shuffle是MapReduce中将Map输出传递给Reduce的关键阶段
- 该服务负责管理中间数据的排序、分组和传输
配置要求:
- 必须显式声明才能支持MapReduce作业
- 值必须严格保持为 mapreduce_shuffle(区分大小写)
关联影响:
- 未正确配置会导致MapReduce作业卡在 reduce 0% 状态
-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
更多详细的配置参考 hadoop doc
六. 启动与验证
- 格式化HDFS
bash
hdfs namenode -format # 仅首次启动执行
- 启动HDFS、YARN和JobHistory
bash
start-dfs.sh
start-yarn.sh
mapred --daemon start historyserver
- 验证进程
bash
jps
# 应包含以下进程:
# DataNode
# SecondaryNameNode
# NameNode
# Jps
# JobHistoryServer
# ResourceManager
# NodeManager
- 运行WordCount测试
bash
# 创建输入目录
hdfs dfs -mkdir /input
hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /input
# 执行WordCount
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.4.1.jar
wordcount /input /output
# 查看结果
hdfs dfs -cat /output/*
- 网页验证
用 kali linux本地火狐浏览器访问
- HDFS状态 :访问
http://hadoop:9870
- YARN状态 :访问
http://hadoop:8088
- JobHistory状态 :访问
http://hadoop:19888
完成! 至此,Hadoop伪分布式环境已配置并验证成功。