Hadoop 集群配置指南:主机名、IP、SSH 和免密登录
1 配置主机名和 IP
2.1 配置静态 IP(所有节点)
Ubuntu/Debian - 编辑
"/etc/netplan/01-netcfg.yaml":
network:
version: 2
renderer: networkd
ethernets:
ens33: # 网卡名称,使用 ip addr 查看
dhcp4: no
addresses: [192.168.1.10/24] # 根据节点修改 IP
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
应用配置:
sudo netplan apply
CentOS/RHEL - 编辑
"/etc/sysconfig/network-scripts/ifcfg-ens33":
TYPE=Ethernet
BOOTPROTO=static
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
重启网络:
sudo systemctl restart network
2.2 配置主机名(所有节点)
设置主机名:
# 主节点执行
sudo hostnamectl set-hostname hadoop-master
# 从节点1执行
sudo hostnamectl set-hostname hadoop-slave1
# 从节点2执行
sudo hostnamectl set-hostname hadoop-slave2
2.3 配置 hosts 文件(所有节点)
编辑
"/etc/hosts":
sudo vim /etc/hosts
# 添加以下内容
192.168.1.10 hadoop-master
192.168.1.11 hadoop-slave1
192.168.1.12 hadoop-slave2
验证配置:
ping hadoop-master
ping hadoop-slave1
ping hadoop-slave2
3. SSH 配置和免密登录
3.1 安装 SSH(所有节点)
# Ubuntu/Debian
sudo apt update
sudo apt install openssh-server openssh-client -y
# CentOS/RHEL
sudo yum install openssh-server openssh-clients -y
启动 SSH 服务:
sudo systemctl start sshd
sudo systemctl enable sshd
3.2 生成 SSH 密钥对(所有节点)
# 生成 RSA 密钥对
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 或者使用 ed25519(更安全)
ssh-keygen -t ed25519 -P '' -f ~/.ssh/id_ed25519
3.3 配置免密登录
方法一:主节点到所有节点的免密登录
1. 在主节点上拷贝公钥到所有节点:
# 拷贝到本机(主节点自身)
ssh-copy-id hadoop-master
# 拷贝到从节点1
ssh-copy-id hadoop-slave1
# 拷贝到从节点2
ssh-copy-id hadoop-slave2
# 如果 ssh-copy-id 不可用,手动操作:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
方法二:手动配置 authorized_keys
1. 在所有节点上收集公钥:
# 在每个节点上查看公钥
cat ~/.ssh/id_rsa.pub
2. 在主节点上创建统一的 authorized_keys:
# 在主节点上操作
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 将从节点的公钥添加到主节点的 authorized_keys
echo "slave1-public-key" >> ~/.ssh/authorized_keys
echo "slave2-public-key" >> ~/.ssh/authorized_keys
3. 分发 authorized_keys 到所有节点:
scp ~/.ssh/authorized_keys hadoop-slave1:~/.ssh/
scp ~/.ssh/authorized_keys hadoop-slave2:~/.ssh/
4. 设置正确的权限:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
3.4 测试免密登录
# 从主节点测试连接到各个节点
ssh hadoop-master "hostname; date"
ssh hadoop-slave1 "hostname; date"
ssh hadoop-slave2 "hostname; date"
# 应该不需要输入密码就能直接登录
4. SSH 安全配置(可选)
4.1 配置 SSH 增强安全
编辑
"/etc/ssh/sshd_config":
sudo vim /etc/ssh/sshd_config
# 修改以下配置
Port 22
PermitRootLogin no
PasswordAuthentication no # 禁用密码登录,只允许密钥登录
PubkeyAuthentication yes
AllowUsers hadoop # 指定允许登录的用户
重启 SSH 服务:
sudo systemctl restart sshd
4.2 创建 Hadoop 专用用户(所有节点)
# 创建用户
sudo useradd -m -s /bin/bash hadoop
sudo passwd hadoop # 设置密码
# 添加到 sudo 组
sudo usermod -aG sudo hadoop
# 切换到 hadoop 用户
su - hadoop
5. 验证集群连通性
5.1 网络连通性测试
# 在各节点上互相 ping 测试
ping -c 3 hadoop-master
ping -c 3 hadoop-slave1
ping -c 3 hadoop-slave2
5.2 SSH 免密登录测试
# 在主节点上测试到所有节点的免密登录
ssh hadoop@hadoop-master 'echo "Master OK"'
ssh hadoop@hadoop-slave1 'echo "Slave1 OK"'
ssh hadoop@hadoop-slave2 'echo "Slave2 OK"'
5.3 创建测试脚本
创建集群验证脚本
"cluster-test.sh":
#!/bin/bash
nodes=("hadoop-master" "hadoop-slave1" "hadoop-slave2")
echo "=== 开始集群连通性测试 ==="
for node in "${nodes[@]}"; do
echo "测试节点: $node"
# 测试 ping
if ping -c 1 $node &> /dev/null; then
echo " ✓ Ping 测试通过"
else
echo " ✗ Ping 测试失败"
fi
# 测试 SSH 连接
if ssh $node "echo 'SSH 连接成功'" &> /dev/null; then
echo " ✓ SSH 免密登录通过"
else
echo " ✗ SSH 免密登录失败"
fi
echo "---"
done
echo "=== 测试完成 ==="
给脚本执行权限并运行:
chmod +x cluster-test.sh
./cluster-test.sh
6. 常见问题解决
6.1 SSH 连接失败
# 检查 SSH 服务状态
sudo systemctl status sshd
# 检查防火墙
sudo ufw status # Ubuntu
sudo firewall-cmd --state # CentOS
# 查看 SSH 连接日志
tail -f /var/log/auth.log
6.2 免密登录仍然需要密码
# 检查文件权限
ls -la ~/.ssh/
# 重新设置权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
# 检查 SELinux(CentOS)
getenforce
setenforce 0 # 临时禁用
6.3 主机名解析失败
# 检查 /etc/hosts 配置
cat /etc/hosts
# 检查 DNS 解析
nslookup hadoop-master
# 重启网络服务
sudo systemctl restart systemd-resolved # Ubuntu
sudo systemctl restart network # CentOS
更多推荐


所有评论(0)