一、什么是 Hadoop 伪分布式安装?
Hadoop 伪分布式安装是一种在单台物理机器上模拟分布式集群环境的部署方式。其核心特点是:
- 分布式服务启用:运行 Hadoop 的所有核心组件(如 HDFS 的 NameNode、DataNode,YARN 的 ResourceManager、NodeManager 等),但所有组件均部署在同一台主机上。
- 模拟集群行为 :通过配置让各组件以 "伪分布式" 模式运行,节点间通过本地环回地址(
localhost)通信,完全模拟真实分布式集群的交互逻辑。 - 轻量易部署:无需多台服务器,适合本地开发、调试或学习 Hadoop 核心原理。
适用场景:
- 初学者入门 Hadoop 分布式架构。
- 开发阶段调试 MapReduce 程序或 HDFS 操作。
- 验证 Hadoop 配置文件的正确性(如权限、端口、路径等)。
二、伪分布式安装核心步骤(以 Hadoop 3.x 为例)
1.用户权限准备
- 建议创建专用用户(如hadoop)进行部署,避免使用root用户:
bash
useradd hadoop #使用 root 用户进行创建用户 hadoop
passwd hadoop #设置 hadoop 用户密码
sudo usermod -aG whell hadoop # 赋予 sudo 权限(按需)
su - hadoop #切换到 hadoop 用户
2.检查并卸载系统自带 OpenJDK(如有)
CentOS 7 默认预装 OpenJDK,需先卸载以避免版本冲突:
bash
# 1.1 查看已安装的 Java 相关包
rpm -qa | grep -i java
# 示例输出(可能包含以下一个或多个包):
# java-1.8.0-openjdk-headless-1.8.0.372.b07-1.el7_9.x86_64
# tzdata-java-2023g-1.el7.noarch
# java-1.8.0-openjdk-1.8.0.372.b07-1.el7_9.x86_64
# 1.2 卸载所有 OpenJDK 相关包(强制删除,忽略依赖)
sudo rpm -e --nodeps $(rpm -qa | grep -i openjdk)
sudo rpm -e --nodeps $(rpm -qa | grep -i tzdata-java)
# 1.3 验证卸载结果(应无输出)
java -version
3.安装 Oracle JDK(通过压缩包部署,推荐 1.8 或 11)
注意:JDK 版本兼容性
- Hadoop 3.x 支持 Java 8/11,避免使用 Java 17+(可能存在类缺失问题)。
3.1 下载 JDK 安装包
从 Oracle JDK 官网 下载对应版本(如 jdk-8u371-linux-x64.tar.gz),上传至服务器(如 /opt/software/ 目录)。
bash
cd /opt/software/ #进入到/opt/software文件夹下
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/8u371-b07/3d5a2bb8f8d4428bbe94aed7ec7ae784/jdk-8u371-linux-x64.tar.gz #网络请求Oracle JDK官网对应版本JDK包
3.2 解压并安装 JDK
bash
# 创建安装目录(推荐 /usr/local/java/)
sudo mkdir -p /usr/local/java/
# 解压到目标目录(注意替换实际文件名)
sudo tar -zxvf jdk-8u371-linux-x64.tar.gz -C /usr/local/java/
# 重命名为简洁名称(可选)
sudo mv /usr/local/java/jdk1.8.0_371 /usr/local/java/jdk8
3.3 配置环境变量
bash
sudo vi /etc/profile # 或编辑当前用户的 ~/.bash_profile 或者是 ~/.bashrc
# 添加以下内容(按实际 JDK 路径修改):
export JAVA_HOME=/usr/local/java/jdk8
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
# 使配置生效
source /etc/profile
# 验证安装(输出 JDK 版本)
java -version
4.配置本地免密码登录(Hadoop 服务启动依赖)
Hadoop 脚本会通过 SSH 协议本地通信,需配置免密登录以避免交互验证:
bash
# 4.1 生成 SSH 密钥对(一路回车,不设密码)
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
# 4.2 将公钥添加到本地授权列表
mkdir -p ~/.ssh
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 4.3 设置文件权限(关键!否则 SSH 可能拒绝登录)
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
# 4.4 测试免密登录(应直接进入,无需密码)
ssh localhost
exit # 退出 SSH 会话
4.下载并安装 Hadoop
4.1 下载 Hadoop
从官网下载稳定版(如hadoop-3.3.6.tar.gz),解压到指定目录:
bash
tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local/ #解压操作,解压到/usr/local
cd /usr/local/
sudo mv hadoop-3.3.6 hadoop # 重命名方便后续操作
4.2 配置环境变量
编辑~/.bashrc或/etc/profile或者当前用户的 ~/.bash_profile,添加内容:
hadoop
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
使配置生效:
bash
source ~/.bashrc
5.配置 Hadoop 核心文件
Hadoop 通过 XML 文件配置,需修改以下 4 个文件(路径:$HADOOP_HOME/etc/hadoop/)。
(1) core-site.xml
配置 HDFS 的默认地址和临时目录:
xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value> # HDFS默认地址(伪分布式)
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value> # 临时文件存储路径(需手动创建)
</property>
</configuration>
(2) hdfs-site.xml
配置 HDFS 副本数(伪分布式下设为 1,因只有一个 DataNode):
xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
(3) mapred-site.xml
配置 MapReduce 框架使用 YARN:
xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(4) yarn-site.xml
配置 YARN 的 ResourceManager 地址和 NodeManager 的环境变量:
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>
5.1 初始化 HDFS 文件系统
格式化 NameNode(首次启动必做,且仅需执行一次):
bash
hdfs namenode -format
5.2 启动服务
依次启动 HDFS 和 YARN 服务:
bash
start-dfs.sh # 启动HDFS(NameNode、DataNode)
start-yarn.sh # 启动YARN(ResourceManager、NodeManager)
5.3 验证安装
- 查看进程:
bash
jps # 应包含NameNode、DataNode、ResourceManager、NodeManager、Jps等进程
- 访问 Web 界面:
- HDFS状态:http://localhost:9870(Hadoop 3.x 端口)
- YARN 资源管理:http://localhost:8088
- 如果访问不了请关闭防火墙再进行访问
bash
systemctl stop firewalld #关闭防火墙
systemctl disable firewall #关闭开机自启
- 简单操作测试:
bash
# 在HDFS创建目录
hdfs dfs -mkdir -p /user/hadoop
# 上传本地文件到HDFS
hdfs dfs -put /etc/profile /user/hadoop
# 查看HDFS文件列表
hdfs dfs -ls /user/hadoop
三、伪分布式 vs 完全分布式 vs 单机模式
| 模式 | 节点数 | 组件部署 | 用途 |
|---|---|---|---|
| 单机模式 | 1 | 仅运行非分布式进程(无守护进程) | 快速验证程序逻辑(无分布式功能) |
| 伪分布式 | 1 | 所有分布式组件运行在同一节点 | 学习、调试、本地测试 |
| 完全分布式 | ≥2 | 各组件分布在不同节点(主从架构) | 生产环境大规模数据处理 |
四、常见问题与注意事项
-
端口冲突 :若 9000、8088 等端口被占用,需修改配置文件中的端口号(如
fs.defaultFS改为hdfs://localhost:9001)。 -
权限问题:避免用sudo启动服务(可能导致文件权限混乱),建议用普通用户操作,或提前设置目录权限:
bashchown -R $USER:$USER /usr/local/hadoop # 赋予当前用户目录所有权 -
日志排查 :启动失败时,查看
$HADOOP_HOME/logs/下的日志文件(如hadoop-${USER}-namenode-${HOSTNAME}.log)。 -
关闭服务 :用
stop-dfs.sh和stop-yarn.sh正常停止,避免直接 kill 进程导致数据不一致。
五、总结
通过以上详细的步骤,我们完成了 Hadoop 伪分布式的安装、配置与验证,对其特点、适用场景也有了更深入的了解。这种轻量级且功能强大的部署方式,无疑是初学者探索 Hadoop 世界的一把金钥匙,更是开发者在本地调试与学习过程中的得力助手。
然而,Hadoop 的魅力远不止于此。在大数据的浪潮中,它是处理海量数据的中坚力量,每一次的操作都像是在与数据进行一场深度对话。想象一下,当你掌握了 Hadoop 伪分布式的精髓,你就能够更加自由地在数据的海洋中遨游,挖掘出那些隐藏在数据背后的宝贵信息。
如果你在安装过程中遇到了任何问题,或者有独特的经验想要分享,欢迎在评论区留言讨论。让我们一起在大数据的征程中携手共进,探索更多的可能性!
别忘了点赞👍、收藏和分享这篇文章,让更多对 Hadoop 感兴趣的朋友能够受益。关注我,获取更多关于大数据技术的精彩内容,一起解锁大数据领域的无限潜力!期待与你在大数据的世界中再次相遇!