在 Hadoop 集群中配置免密登录是确保各节点间高效通信的关键步骤。以下是基于 SSH 密钥认证的免密登录配置方案,支持主节点(NameNode)到所有从节点(DataNode)的无密码访问:
1. 环境准备
-
集群规划(示例):
- 主节点(NameNode):
master
(IP:192.168.1.100) - 从节点 1(DataNode):
slave1
(IP:192.168.1.101) - 从节点 2(DataNode):
slave2
(IP:192.168.1.102)
- 主节点(NameNode):
-
** hosts 文件配置 **:
所有节点的/etc/hosts
文件需包含完整的节点映射:bash
192.168.1.100 master 192.168.1.101 slave1 192.168.1.102 slave2
2. 生成 SSH 密钥对
在 主节点(master
)上执行以下命令:
bash
# 生成 RSA 密钥对(无需密码)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa# 查看生成的密钥文件
ls ~/.ssh/
# 输出应包含:id_rsa(私钥)和 id_rsa.pub(公钥)
3. 分发公钥到所有节点
将主节点的公钥(id_rsa.pub
)分发到 所有节点(包括主节点自身):
bash
# 方法一:逐个节点分发(适用于少量节点)
ssh-copy-id root@master
ssh-copy-id root@slave1
ssh-copy-id root@slave2# 方法二:批量分发(适用于大量节点,需先准备节点列表)
NODES="master slave1 slave2"
for node in $NODES; dossh-copy-id root@$node
done
注意:首次执行
ssh-copy-id
时需输入目标节点密码,后续即可免密登录。
4. 验证免密登录
在主节点上测试到各节点的连接:
bash
# 测试主节点自身
ssh master# 测试从节点1
ssh slave1# 测试从节点2
ssh slave2
若无需输入密码即可登录,表示配置成功。
5. 优化 SSH 连接
修改主节点的 SSH 配置(~/.ssh/config
),加速连接:
bash
# 创建/编辑配置文件
cat > ~/.ssh/config << EOF
Host *StrictHostKeyChecking no # 自动接受新节点的密钥UserKnownHostsFile /dev/null # 不记录已访问节点的密钥ConnectTimeout 5 # 连接超时时间(秒)
EOF# 设置正确权限
chmod 600 ~/.ssh/config
6. 常见问题
-
SSH 服务未启动:
bash
# 启动 SSH 服务(Ubuntu/Debian) sudo systemctl start sshd sudo systemctl enable sshd # 开机自启# 启动 SSH 服务(CentOS/RHEL) sudo service sshd start sudo chkconfig sshd on # 开机自启
-
权限问题:
bash
# 确保 .ssh 目录和文件权限正确 chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
-
防火墙限制:
bash
# 开放 SSH 端口(Ubuntu/Debian) sudo ufw allow 22# 开放 SSH 端口(CentOS/RHEL) sudo firewall-cmd --zone=public --add-port=22/tcp --permanent sudo firewall-cmd --reload
7. 进阶:从节点间的免密登录
若需要从节点之间也能免密通信(如 YARN 调度),需在 每个从节点 重复步骤 2~4,生成各自的密钥对并互相分发。
配置完成后,Hadoop 集群各节点间可通过 SSH 无密码通信,确保 start-all.sh
、stop-all.sh
等脚本能正常执行。