本文是大数据系列第 3 篇,讲解 Hadoop 集群 SSH 免密登录配置,以及编写文件分发脚本,为集群群起做准备。

完整图文版:CSDN 原文 | 掘金

为什么需要免密登录

Hadoop 集群启动时,主节点会通过 SSH 连接到各从节点执行启动命令。如果没有免密,每次都需要手动输入密码,集群无法自动化启动。

/etc/hosts 配置(重要)

配置不好的话集群之间会互相不认证,所有节点需要在 /etc/hosts 中互相映射:

# 每台机器的 /etc/hosts 都要加上这三行
<h121的IP> h121.wzk.icu h121
<h122的IP> h122.wzk.icu h122
<h123的IP> h123.wzk.icu h123

公网云服务器注意:hostname 对应的 IP 填公网 IP,不要用 127.x.x.x。

SSH 免密配置步骤

1. 三台节点都生成 RSA 密钥

ssh-keygen -t rsa -b 4096
# 一路回车,不要设置密码

生成后在 ~/.ssh/ 目录下有:

  • id_rsa:私钥
  • id_rsa.pub:公钥

2. 将公钥分发到所有节点

在每台节点上执行,将自己的公钥分发到三台机器(包括自身):

ssh-copy-id h121.wzk.icu
ssh-copy-id h122.wzk.icu
ssh-copy-id h123.wzk.icu

3. 验证免密登录

ssh h122.wzk.icu
# 不需要输密码即成功

集群文件分发脚本

在集群运维中,经常需要将配置文件同步到所有节点,编写一个 rsync 脚本放到 /usr/local/bin 中全局可用:

#!/bin/bash
# 脚本:xsync,用法:xsync <文件或目录>
# 放到 /usr/local/bin/xsync 并 chmod +x

pcount=$#
if((pcount==0)); then
  echo "No args..."
  exit
fi

p1=$1
fname=$(basename $p1)
pdir=$(cd -P $(dirname $p1); pwd)

echo "------sync $pdir/$fname------"

for host in h121.wzk.icu h122.wzk.icu h123.wzk.icu; do
  echo "-------- $host --------"
  rsync -rvl $pdir/$fname $host:$pdir
done

安装:

sudo cp xsync /usr/local/bin/
sudo chmod +x /usr/local/bin/xsync

使用:

xsync /opt/servers/hadoop-2.9.2/etc/hadoop/

常见踩坑

  1. 权限问题~/.ssh 目录权限必须是 700,~/.ssh/authorized_keys 权限必须是 600
  2. 防火墙:公网云服务器要放行 22 端口(通常已开放)
  3. 首次登录提示:第一次 ssh 连接会提示 “Are you sure…”,手动输 yes 确认后才能免密

下一篇:大数据-04 Hadoop集群群起