Haoop集群中的各个节点主机需要互相通信,因此datanode与namenode之间需要免密码ssh
本次实践分为四台虚拟机:
192.168.227.128 master
192.168.227.129 slave1
192.168.227.130 slave2
192.168.227.131 slave3
步骤如下:
- 分别在四台机器上生成密匙对
#进入grid用户的主目录
cd ~
#生成密匙对
ssh-keygen -t rsa
然后一路按回车键
- 在master上执行
#进入.ssh
cd ~/.ssh/
#把本机的公匙追加到自身的~/.ssh/authorized_keys文件里
ssh-copy-id 192.168.227.128
#将authorized_keys文件复制到第二台主机
scp /home/grid/.ssh/authorized_keys 192.168.227.129:/home/grid/.ssh/
- 在其他三个节点机器上分别重复以上步骤,但ip地址要随之更改,分别改为本机ip跟要复制到的下一台机器
- 在第四个机器时,将本机公匙添加到文件后,将该文件复制到其他各个机器的文件夹里,以便实现互相免密通信
scp /home/grid/.ssh/authorized_keys 192.168.227.128:/home/grid/.ssh/
scp /home/grid/.ssh/authorized_keys 192.168.227.129:/home/grid/.ssh/
scp /home/grid/.ssh/authorized_keys 192.168.227.130:/home/grid/.ssh/
在执行以下ssh-copy-id 192.168.227.128步骤时,遇到以下问题:
/usr/bin/ssh-copy-id: ERROR: ssh: connect to host 192.168.227.128 port 22: Connection refused
解决方法如下:
运行 ps -e | grep ssh,查看是否有sshd进程
如果没有,说明server没启动,通过 /etc/init.d/ssh -start 启动server进程,如果提示ssh不存在 那么就是没安装server
通过 sudo apt-get install openssh-server命令安装
由于我本次实践是全新的系统,所以只安装了openssh-client,并没有安装openssh-server
而在安装openssh-server,因openssh-client版本较新,而openssh-server依赖的openssh-client版本较旧,所以需要将原本的openssh-client卸载后与openssh-server一起重装,卸载命令为:
sudo apt-get autoremove openssh-client
接着安装:
sudo apt-get install openssh-client openssh-server
安装完毕后启动sshd服务:
sudo /etc/init.d/ssh start
问题成功解决
(PS:其他节点机器也要如上安装ssh,否则会connection confused)