三节点Hadoop集群搭建实战:从SSH互信到分布式部署全解析
刚接触分布式系统的开发者,往往在搭建多节点环境时遇到各种"拦路虎"。其中SSH免密登录配置是最容易卡壳的环节——明明照着教程操作却总是出现Permission denied或Connection refused。本文将用三台CentOS 7虚拟机,带你完整走通从SSH互信到Hadoop 3.1.3集群部署的全流程,特别针对密钥分发、权限设置等易错点进行深度解析。
1. 环境准备与基础配置
在开始Hadoop部署前,需要确保三台虚拟机处于干净的初始状态。建议使用最小化安装的CentOS 7系统,内存建议每台不低于2GB。首先在三台机器上执行以下基础配置:
# 关闭SELinux(需要重启生效) sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 安装必要工具 yum install -y vim wget net-tools主机命名规范建议采用master,worker1,worker2的格式,修改方法如下:
# 在三台机器分别执行(注意替换主机名) hostnamectl set-hostname master # 第一台 hostnamectl set-hostname worker1 # 第二台 hostnamectl set-hostname worker2 # 第三台/etc/hosts文件需要包含所有节点的IP映射,三台机器保持相同配置:
192.168.1.101 master 192.168.1.102 worker1 192.168.1.103 worker2提示:使用
ping hostname测试网络连通性,确保三台机器可以互相通信后再继续后续步骤。
2. SSH免密登录深度配置
SSH互信是Hadoop集群正常工作的基础。许多初学者在此步骤遇到问题,主要是因为忽略了权限设置或配置文件细节。下面分步骤详解:
2.1 密钥生成与分发
在master节点执行以下命令生成密钥对(三台机器都需要执行):
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa关键点说明:
-t rsa指定密钥类型为RSA-P ''设置空密码-f指定密钥文件路径
将公钥分发到所有节点(包括自身):
# 在master节点执行 ssh-copy-id master ssh-copy-id worker1 ssh-copy-id worker2常见问题排查:
- 如果出现
port 22: Connection refused,检查sshd服务是否运行:systemctl status sshd systemctl start sshd - 遇到
Permission denied错误,检查目标机器的~/.ssh目录权限应为700,authorized_keys文件权限应为600
2.2 SSH服务端关键配置
编辑/etc/ssh/sshd_config文件,确保以下参数正确设置:
RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no # 禁用密码登录增强安全性修改后重启服务:
systemctl restart sshd2.3 多节点互信测试
使用以下命令验证免密登录是否成功:
ssh master "date" # 从worker1测试连接master ssh worker1 "date" # 从master测试连接worker1 ssh worker2 "date" # 跨worker节点测试注意:如果某条命令仍要求输入密码,请检查对应节点的
authorized_keys文件是否包含所有公钥,以及文件权限是否正确。
3. Hadoop集群安装部署
3.1 JDK环境配置
Hadoop依赖Java环境,建议安装OpenJDK 8:
yum install -y java-1.8.0-openjdk-devel配置环境变量(三台机器都需要):
echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk' >> /etc/profile echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile source /etc/profile验证安装:
java -version3.2 Hadoop安装与配置
在master节点下载并解压Hadoop:
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz tar -xzf hadoop-3.1.3.tar.gz -C /opt/ mv /opt/hadoop-3.1.3 /opt/hadoop配置环境变量(三台机器都需要):
echo 'export HADOOP_HOME=/opt/hadoop' >> /etc/profile echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> /etc/profile source /etc/profile3.3 关键配置文件修改
需要配置的核心文件位于$HADOOP_HOME/etc/hadoop/目录下:
- core-site.xml- 核心全局配置:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop/tmp</value> </property> </configuration>- hdfs-site.xml- HDFS相关配置:
<configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/opt/hadoop/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/opt/hadoop/dfs/data</value> </property> </configuration>- workers- 指定所有工作节点:
worker1 worker2- hadoop-env.sh- 补充JAVA_HOME配置:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk4. 集群启动与验证
4.1 配置文件分发
将配置好的Hadoop目录复制到所有worker节点:
scp -r /opt/hadoop worker1:/opt/ scp -r /opt/hadoop worker2:/opt/ scp -r /etc/profile worker1:/etc/ scp -r /etc/profile worker2:/etc/在worker节点上执行:
source /etc/profile4.2 格式化HDFS
在master节点执行:
hdfs namenode -format成功格式化会看到Storage directory /opt/hadoop/dfs/name has been successfully formatted提示。
4.3 启动集群
在master节点执行:
start-dfs.sh start-yarn.sh验证各节点进程:
- master节点应有:NameNode、ResourceManager
- worker节点应有:DataNode、NodeManager
使用jps命令检查:
jps4.4 Web界面访问
Hadoop提供Web管理界面:
- HDFS: http://master:9870
- YARN: http://master:8088
在集群运行后,可以执行测试作业验证功能完整性:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi 10 100