在Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和停止各个节点上的各种守护进程的,这就需要在节点之间执行指令的时候是不需要输入密码的方式,故我们需要配置SSH使用无密码公钥认证的方式。
两台电脑一台NameNode(NameNode,192.168.0.100)一台DataNode1,(DataNode1, 192.168.0.101)
修改每台电脑的hosts文件。
把DataNode1的主机名和ip地址加到NameNode里,把NameNode的主机名和ip地址加到DataNode1里。
如果是多台DataNode,可以把DataNode的主机名和ip地址都加入到NameNode里,然后把NameNode的hosts文件传给所有的NameNode。有的地方说把hosts文件里的回环地址那行注销了或者把localhost改成相应的主机名,但是我没改,目前没发现问题。
然后在所有的电脑上建立相同的用用户hadoop,用户不一样的话很容易混乱。
在所有电脑上建立.ssh目录。建在/home/hadoop/里就行了。
mkdir .ssh
以NameNode为例,执行
ssh-keygen -t rsa
然后一直Enter.会按照默认的选项将生成的密钥保存在.ssh中,id_rsa是私钥,id_rsa.pub是公钥 。
接着进入到.ssh目录里,执行
cp id_rsa.pub authorized_keys
scp authorized_keys DataNode1:/home/hadoop/.ssh #把公钥传给DataNode1。
这样就可以用ssh DataNode1命令访问DataNode1主机了,第一次访问需要密码,后来就不需要了。
但是实际中,是不行的。一直需要密码。重来了好几次,后来细看了一下,有这么一条提示Agent admitted failure to sign using the key。尼玛。。。
在这执行下面命令就好了
ssh-agent #打开ssh代理。
ssh-add id_rsa #将私 加进去.
现在就可以用NameNode无密码访问DataNode1里。
如果是多台主机的话,可以用cat命令把各种DataNode的公 追加到一块,以防出错。
DataNode无密码访问NameNode过程一样。
另外如果还不能无密码访问,可能是权限问题。.ssh 设置成700,公钥设置成600,就可以了,据说这样最安全。