Hadoop集群搭建之SSH无密码登录配置

在多台电脑上搭建Hadoop集群已经有一段时间了,SSH无密码登录服务配置成了一道无法逾越的鸿沟,在启动hadoop集群时,老实让输入datanode也就是slave的密码,但是输入密码但却总是提示permission denied,启动不了datanode。看了网上有关hadoop集群搭建之ssh服务总是千篇一律,不得其法,由于本人是菜鸟一枚,也无法自行快速解决,十分纠结。机缘巧合,我遇到一个对SSH较为熟知的大牛,从他那里获得启发,终于完成了ssh无密码登录的配置。在这里向他致敬。废话不多说,下面就对ssh密码登录其他主机做一个粗略的说明(我使用的系统是Ubuntu 12.04 lts,linux 3.2的内核,不过这个对ssh配置应该没有什么影响)。

特别说明:为使在启动hadoop集群时不用输入datanode的密码,最好将所有机器的用户名设为同一个名字,我会在文章最后给出解释。我这里用两台机器做为实例,两台机器的用户名都是hadoop,主节点的ip为121.49.110.32,一台为192.168.0.2.

 

1.ssh的安装与配置(两台机器做同样的设置) 1.1ssh服务的安装

打开终端,输入

sudo apt-get install openssh-server

程序自动安装。

1.2ssh服务的配置

有的网友说在配置ssh前需要关闭防火墙,我照做了,不过关闭也应该没有问题。关闭防火墙的命令“sudo ufw disable”.然后在终端输入

ssh-keygen

遇到提示输入文件名或是密码的地方不用管,只需按回车键即可。完成之后,在/home/username(“username”是登录名)目录下会有生成 一个".ssh"目录,“ls .ssh”之后会发现里面有两个文件,一个是id_rsa,另一个是id_rsa.pub,前者是私钥,后者是公钥。

在终端输入

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

建立信任连接列表

在终端输入

ssh localhost

如果有错误提示,类似"ssh: connect to host localhost port 22: Connection refused",说明你没有安装ssh-client,此时只需要在终端输入

sudo apt-get install openssh-client

安装完成后,再输入“ssh localhost”就应该没有问题了。按照提示输入相关信息就可以了。

2.无密码登录另一台主机(121.49.110.32无密码登录192.168.0.2)

在ip为121.49.110.32主机终端中输入

sudo gedit  /etc/hosts

在最后键入

192.168.0.2 hadoop

保存退出。并在终端中键入

scp ~/.ssh/id_rsa.pub hadoop@192.168.0.2:/home/hadoop/

这里可能会让输入hadoop@192.168.0.2的主机密码,输入就可以了。

在ip为192.168.0.2的主机终端中键入

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

建立信任列表。然后回到121.49.110.32的主机上,终端键入

ssh hadoop@192.168.0.2

如果有输入密码的提示,直接输入ip为192.168.0.2的主机密码就可以了。实际上,如果你键入

ssh 192.168.0.2

程序也可能会提示你输入hadoop@192.168.0.2密码,输入即可。到此已经完成了ssh无密码登录的配置工作,如果hadoop集群已经好了,在终端中切换到hadoop的安装目录下,并输入

bin/start-all.sh

你会发现程序先是启动namenode,然后启动192.168.0.2上的job tracker,但不会让用户键入192.168.0.2的密码。但是如果你两台主机的用户名不一样,比如说121.49.110.32主机的用户名为namenode,而192.168.0.2主机的用户名为datanode,系统将让你输入“namenode@192.168.0.2”的密码。此时,你怎么输入密码都不能成功启动datanode,这是为什么呢?请看下面:

ssh在登录其他主机时采用的“ ssh 目的主机用户名@目的主机的ip”的模式,如这里“ssh hadoop@192.168.0.2”,ip确定唯一主机,用户名确定主机上的有效用户,密码用于切换到该用户目录下。在hadoop的集群中,slave文件中给的是datanode的主机ip,在启动hadoop的时候,hadoop会依照该文件提供的ip地址逐个启动datanode节点上的tasktracker和datanode守护进程,但是由于没有提供datanode主机的用户名,因而ssh默认以当前用户(假设为namenode)做为目标主机的用户(假设为datanode),但ssh不会检测目标主机是否存在该用户(这显然不是它的工作),在本机~/.ssh/known_hosts中没有存放有namenode@datanode‘s ip,因而需要输入密码,但是由于目标主机没有namenode用户,因而无论怎么输入密码都是错的,或者提示权限不够。

所以,如果要搭建hadoop集群,最好将所有机器的用户名改成同一个用户,这样会方便很多。当然,这也是我的片面之词请勿喷我!如果有朋友不这样做也能将多台机器的hadoop集群搭建成功也欢迎分享,供大家选择。欢迎大家积极交流,一个人抗争,能力,精力始终有限^_^。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/373f5b62f6cdbca87de0ccf3cc8875c1.html