学到这里,我们需要将hadoop102module中的jdk和hadoop文件还有我们写的那个配置文件全部分发到hadoop103和hadoop104中,注意一下,我们分发的时候,使用的用户是我们创建的那个hadoopuserscp -r /opt/module hadoopuser@hadoop103:/opt/module scp -r /opt/module hadoopuser@hadoop103:/opt/module sudo scp -r /etc/profile.d/my_env.sh hadoopuser@hadoop103:/etc/profile.d/my_env.sh # 在分发的服务上重新加载一下配置文件 source my_env.sh
xsync因为scp每次运行都会将文件覆盖一次,如果我们要分发某个目录下的多个文件,它会将所有文件都覆盖一次,效率低
使用xsync可以提高我们分发的效率,它第一次分发的效果和scp一样,但是后面再次分发时,仅仅只会对修改的文件进行分发
xsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点,我们通常会将它的两个参数都加上
基本语法rsync -av $pdir/$fname $user@hadoop$host:$pdir/$fname 命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称 # 参数说明 -a 归档拷贝 -v 显示复制的过程
示例:# 把hadoop102机器上的/opt/software目录同步到hadoop103服务器的root用户下的/opt/目录 rsync -av /opt/software/ hadoop103:/opt/software
我们分发的脚本会经常使用,因为我们会对配置文件进行修改,于是我们可以使用shell编程,将xsync分发命令通过脚本文件进行实现
在上一章我们学习Hadoop目录的时候知道,Hadoop的bin目录是Hadoop存放它命令的文件夹
因为我们的Hadoop添加到了环境变量中,所以我们可以将我们的脚本放大bin目录,就可以在任何地方直接运行了
我将分发脚本和其他实用的脚本放到下面的Hadoop中一些使用小脚本中,大家可以自己复制一份到指定的目录下
SSH无密登录 SSH连接服务器我们前面进行文件分发的时候,每次都需要登录,在Hadoop集群中当然不能这样,因此我们需要使用ssh无密登录
ssh用于远程连接,它的原理类似我们的xshell
基本语法ssh另一台电脑的ip地址
因为我们前面定义了hostname,所以我们可以直接ssh hostname进行连接,我现在是hadoop102服务器,例如ssh hadoop103
这个就是我前面一直强调修改hostname和hosts的原因,我们连接后,会出现下面这个提示,直接yes,然后需要输入密码即可成功连接到103服务器The authenticity of host \'192.168.1.103 (192.168.1.103)\' can\'t be established. RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06. Are you sure you want to continue connecting (yes/no)?
无密钥配置免密登录原理
有一个我们经常见到的免密登录原理图
它的原理很简单,我们将它理解为一把锁和一把钥匙,锁和钥匙是一对,公钥就是钥匙,私钥就是锁,我们可以配很多把钥匙用来开这把锁,我还是以hadoop102和hadoop103举例
当我需要让hadoop103无密连接到102时,那么我就将hadoop102的这把钥匙(公钥)发送给hadoop103,此时hadoop103就有了打开hadoop102锁的钥匙
当hadoop103 ssh hadoop102 时,hadoop103就会拿着这把钥匙(公钥),hadoop102就会查看这把钥匙是否能开启自己的锁(私钥),如果配对成功,那么直接就可以登录而无需密码
注意一下,我们接下来以及以后的所有操作都是使用我们创建的那个用户来进行的
免密登录示例,以上面例子举例,我现在是hadoop102服务器
# 进入生成公钥私钥的文件夹 cd ~/.ssh # 生成公钥和私钥 ssh-keygen -t rsa # 然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥) # 将公钥拷贝到要免密登录的目标机器上 ssh-copy-id hadoop103
.ssh文件夹下存放的就是我们的公钥和私钥,.ssh文件夹下(~/.ssh)的文件功能解释:
known_hosts 记录ssh访问过计算机的公钥(public key)
id_rsa 生成的私钥
id_rsa.pub 生成的公钥
authorized_keys 存放授权过的无密登录服务器公钥
接下来我们需要每一台服务器都进行公钥私钥的生成,然后分别分发到各个的服务器中,对此我写了一个脚本,大家直接运行即可
免密登录的脚本