配置SSH免密登录
配置ssh免密登录是为了将配置好的应用或文件直接分发到其他节点,不然 一台一台的配置太慢了。此外,Hadoop有很多脚本要依赖于ssh执行
1 在每台主机上生成公钥和私钥
在所有节点上运行如下命令,运行ssh-keygen后一直回车就行,运行完成后会在用户家目录下的.ssh目录下生成id_rsa(私钥文件)和id_rsa.pub(公钥文件)
ssh-keygen
ssh-copy-id 节点1IP地址/主机名
ssh-copy-id 节点2IP地址/主机名
ssh-copy-id 节点3IP地址/主机名
-
分发完成后,被分发的节点会在用户家目录下的.ssh目录下生成authorized_keys文件,此文件负责保存得到的公钥,再有其他节点分发给它公钥,公钥会被追加到此文件中。
-
此外hadoop1下还会生产known_hosts文件,该文件在在用户家目录下的.ssh目录下,A通过ssh首次连接到B,B会将公钥1(host key)传递给A,A将公钥1存入known_hosts文件中,以后A再连接B时,B依然会传递给A一个公钥2,OpenSSH会核对公钥,通过对比公钥1与公钥2 是否相同来进行简单的验证,如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
2 scp(secure copy,安全拷贝)
介绍:scp命令是依赖于ssh协议的远程拷贝技术,便于将文件从一个节点拷贝到另一个节点
scp [选项] [用户@主机:]文件/目录 [用户@主机:]文件/目录
选项:
-r #递归拷贝,用于拷贝目录
3 rsync(remote sync,远程同步)
rsync和scp区别:rsync只对差异文件做同步,scp是把所有文件都复制过去。
rsync [选项] [用户@主机:]文件/目录 [用户@主机:]文件/目录
选项:
-a #可以递归同步(可以同步元信息,比如修改时间、权限等)
-v #显示复制过程
4 xsync集群分发脚本
为了方便将修改的文件分发给其他节点,建一个脚本文件。
vim /bin/xsync.sh
#!/bin/bash
# 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
# 遍历要分发的节点
for host in hadoop2 hadoop3
do
echo ==================== $host ====================
# 遍历所有输入的文件/目录
for file in $@
do
# 判断文件是否存在
if [ -e $file ]
then
# 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
# 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
# 要给脚本执行权限
chmod +x xsync.sh