基于本次实操过程,以下是在 VirtualBox 多节点集群(master + slave1 + slave2)上安装 Hadoop 的核心步骤 + 关键避坑点 ,全程以 hadoop 用户为核心操作主体:
一、前置环境准备(所有节点统一操作)
1. 基础系统配置
-
配置各节点静态 IP、主机名(master/slave1/slave2),并修改
/etc/hosts映射 IP 与主机名; -
关闭防火墙/SELinux(实验环境简化):
systemctl stop firewalld && systemctl disable firewalld、setenforce 0; -
配置 master 到 slave1/slave2 的 SSH 免密登录(避免后续同步/启动需要重复输密码)。
2. Java 环境部署(核心依赖)
-
下载 OpenJDK 12(或 JDK 8,适配 Hadoop 2.7.3 更稳定)安装包,解压到统一路径(如
/usr/local/java/jdk-12.0.2); -
所有节点配置
JAVA_HOME环境变量(/etc/profile或.bashrc),确保java -version能正常输出版本; -
✅ 避坑:所有节点 Java 路径必须完全一致,否则后续 Hadoop 配置会报「Java 路径不存在」错误。
3. 创建 hadoop 用户(所有节点)
useradd -d /home/hadoop -m hadoop # 创建用户并指定家目录 passwd hadoop # 设置密码(如 Hanmei12#$)
✅ 避坑:必须在 master/slave1/slave2 都创建,且用户名/家目录/密码一致。
二、Hadoop 安装包部署(先 master,后同步 slave)
1. master 节点部署安装包
-
下载 Hadoop-2.7.3 安装包(官网归档/华为云镜像,若 wget 证书报错加
--no-check-certificate,镜像 403/404 则本地下载后 SFTP 上传); -
将安装包复制到
/home/hadoop目录,赋予hadoop:hadoop权限,解压到/home/hadoop/hadoop-2.7.3:tar -zxvf hadoop-2.7.3.tar.gz -C /home/hadoop/hadoop-2.7.3 --strip-components=1
2. 同步安装包到 slave1/slave2
# master 节点 root 执行 ssh root@slave1 "mkdir -p /home/hadoop/hadoop-2.7.3" # 先创建目录 scp /usr/local/hadoop-2.7.3.tar.gz root@slave1:/home/hadoop/ # 同步安装包 ssh root@slave1 "cd /home/hadoop && tar -zxvf hadoop-2.7.3.tar.gz -C /home/hadoop/hadoop-2.7.3 --strip-components=1" # 远程解压 ssh root@slave1 "chown -R hadoop:hadoop /home/hadoop/hadoop-2.7.3" # 赋权 # slave2 执行相同操作
✅ 避坑:同步前先创建目录,解压后必须赋权,否则 hadoop 用户无权限访问。
三、Hadoop 核心配置(先 master,后同步 slave)
1. 配置 Java 路径(关键)
-
编辑 master 节点
/home/hadoop/hadoop-2.7.3/etc/hadoop/hadoop-env.sh和yarn-env.sh,指定实际 Java 路径:export JAVA_HOME=/usr/local/java/jdk-12.0.2 # 与节点实际 Java 路径一致 -
同步配置文件到 slave1/slave2,并修正 slave 节点的 Java 路径(若 slave 路径与 master 不同):
scp hadoop-env.sh yarn-env.sh root@slave1:/home/hadoop/hadoop-2.7.3/etc/hadoop/ ssh root@slave1 "su hadoop -c 'sed -i \"s#旧路径#新路径#g\" /home/hadoop/hadoop-2.7.3/etc/hadoop/hadoop-env.sh'"
✅ 验证:所有节点执行 hadoop version 能正常输出版本,无「Java 路径不存在」报错。
2. 集群核心配置文件(master 节点修改)
|-----------------|----------------------------------------------------------------------|
| 配置文件 | 核心配置项 |
| core-site.xml | 指定 NameNode 地址(hdfs://master:9000)、Hadoop 临时目录 |
| hdfs-site.xml | 设置副本数(2)、NameNode/DataNode 数据目录、关闭权限检查 |
| mapred-site.xml | 指定 MapReduce 运行在 YARN 上(mapreduce.framework.name=yarn) |
| yarn-site.xml | 指定 ResourceManager 地址(master:8032)、NodeManager 服务(mapreduce_shuffle) |
| slaves | 添加 slave1、slave2(指定 DataNode 节点) |
3. 同步配置文件到 slave
scp core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml slaves root@slave1:/home/hadoop/hadoop-2.7.3/etc/hadoop/ # slave2 执行相同操作,同步后赋权:chown -R hadoop:hadoop /home/hadoop/hadoop-2.7.3/etc/hadoop/
4. 创建数据目录(所有节点)
# master 节点 mkdir -p /home/hadoop/hadoop-2.7.3/tmp /home/hadoop/hadoop-2.7.3/namenode /home/hadoop/hadoop-2.7.3/datanode # slave1/slave2 节点(仅需 tmp 和 datanode) ssh root@slave1 "su hadoop -c 'mkdir -p /home/hadoop/hadoop-2.7.3/tmp /home/hadoop/hadoop-2.7.3/datanode'"
四、集群初始化与启动
1. 格式化 NameNode(仅 master 执行一次)
su hadoop cd /home/hadoop/hadoop-2.7.3 bin/hdfs namenode -format
✅ 成功标志:输出最后一行显示 successfully formatted。
2. 启动集群(master 节点)
sbin/start-dfs.sh # 启动 HDFS(NameNode/DataNode/SecondaryNameNode) sbin/start-yarn.sh # 启动 YARN(ResourceManager/NodeManager)
3. 验证集群状态
-
master 节点
jps:显示 NameNode、ResourceManager、SecondaryNameNode、Jps; -
slave1/slave2 节点
jps:显示 DataNode、NodeManager、Jps; -
浏览器访问
http://master:50070(HDFS WebUI)、http://master:8088(YARN WebUI),能正常打开即集群运行正常。
五、核心避坑点总结
-
路径一致性:所有节点的 Java 路径、Hadoop 安装路径必须完全一致,否则配置同步后会报「文件/目录不存在」;
-
权限问题 :所有 Hadoop 相关文件/目录必须归属
hadoop:hadoop,否则启动/执行命令会报权限不足; -
用户一致性 :master/slave 必须都创建
hadoop用户,且操作 Hadoop 时必须切换到该用户(避免 root 启动导致权限混乱); -
配置同步顺序:先给 slave 部署安装包 + 创建目录,再同步配置文件,否则 scp 会提示路径不存在;
-
格式化仅一次:NameNode 格式化只能执行一次,重复格式化会导致 DataNode 无法连接。
关键点回顾
-
前置核心:所有节点统一 Java 环境、创建 hadoop 用户、配置 SSH 免密,是集群部署的基础;
-
配置核心:先在 master 完成所有配置文件修改,再同步到 slave,确保集群配置一致;
-
启动核心:仅 master 格式化 NameNode,启动集群后通过
jps验证各节点组件是否正常启动。
按照以上步骤操作,即可在 VirtualBox 集群中完成 Hadoop-2.7.3 的完整安装与启动,满足基础的分布式计算/存储实验需求。