Hadoop集群运行时,NameNode需要通过SSH协议启动和管理各个DataNode上的守护进程。由于Hadoop不支持交互式密码输入,必须配置SSH免密登录,否则:
在所有节点(Master和Slave)上执行以下操作:
生成RSA密钥对(如果尚未生成):
ssh-keygen -t rsa
~/.ssh/
目录下:
id_rsa
:私钥(必须严格保密)id_rsa.pub
:公钥(可自由分发)确保.ssh
目录权限正确:
chmod 700 ~/.ssh
在Master节点上,将公钥复制到所有Slave节点(包括自身):
ssh-copy-id -i ~/.ssh/id_rsa.pub whzy@slave1
ssh-copy-id -i ~/.ssh/id_rsa.pub whzy@slave2
ssh-copy-id -i ~/.ssh/id_rsa.pub whzy@master # 自身也需要配置
手动配置方法(如果ssh-copy-id
不可用):
cat ~/.ssh/id_rsa.pub | ssh whzy@slave1 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
在Master节点上测试连接到各个节点:
ssh slave1 # 应该直接登录,无需密码
exit
ssh slave2 # 应该直接登录,无需密码
exit
ssh master # 自身连接测试
如果仍需密码,检查:
authorized_keys
文件权限(应为600).ssh
目录权限(应为700)setenforce 0
)Hadoop集群节点间需要通过主机名相互通信。配置/etc/hosts
文件可以:
在所有节点上执行:
使用root权限编辑/etc/hosts
文件:
sudo vi /etc/hosts
添加所有集群节点的IP和主机名映射(示例):
192.168.131.136 master
192.168.131.137 slave1
192.168.131.138 slave2
确保包含:
在每个节点上执行:
ping master -c 3
ping slave1 -c 3
ping slave2 -c 3
应能正确解析并收到响应。
如果主机名尚未设置,可在每个节点上执行:
# 在master节点
sudo hostnamectl set-hostname master
# 在slave1节点
sudo hostnamectl set-hostname slave1
# 在slave2节点
sudo hostnamectl set-hostname slave2
问题现象:
解决方案:
检查sshd
服务是否运行:
systemctl status sshd
检查防火墙设置:
systemctl stop firewalld # 临时关闭
systemctl disable firewalld # 永久关闭
检查/etc/ssh/sshd_config
配置:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no # 配置免密后可禁用密码登录
问题现象:
解决方案:
确认所有节点的/etc/hosts
内容一致
检查网络连通性:
ping <IP地址> # 先测试IP是否可达
检查主机名大小写是否一致
完成本章配置后,您的集群应具备:
接下来可以继续: