在多台电脑上搭建Hadoop集群已经有一段时间了,SSH无密码登录服务配置成了一道无法逾越的鸿沟,在启动hadoop集群时,老是让输入datanode也就是slave的密码,但是输入密码但却总是提示permission denied,启动不了datanode。看了网上有关hadoop集群搭建之ssh服务总是千篇一律,不得其法,由于本人是菜鸟一枚,也无法自行快速解决,十分纠结。机缘巧合,我遇到一个对SSH较为熟知的大牛,从他那里获得启发,终于完成了ssh无密码登录的配置。在这里向他致敬。废话不多说,下面就对ssh密码登录其他主机做一个粗略的说明(我使用的系统是Ubuntu12.04 lts,linux 3.2的内核,不过这个对ssh配置应该没有什么影响)。
特别说明:为使在启动Hadoop集群时不用输入datanode的密码,***将所有机器的用户名设为同一个名字,我会在文章***给出解释。我这里用两台机器做为实例,两台机器的用户名都是hadoop,主节点的ip为121.49.110.32,一台为192.168.0.2。
1.ssh的安装与配置(两台机器做同样的设置)
1.1 ssh服务的安装
打开终端,输入:
sudo apt-get install openssh-server
程序自动安装。
1.2 ssh服务的配置
有的网友说在配置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 port22: 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.2Hadoop
保存退出。并在终端中键入:
scp ~/.ssh/id_rsa.pubHadoop@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的主机上,终端键入:
sshHadoop@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”的模式,如这里“sshHadoop@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集群搭建成功也欢迎分享,供大家选择。欢迎大家积极交流,一个人抗争,能力,精力始终有限^_^。
转载请注明:IT运维空间 » 运维技术 » Hadoop集群搭建之SSH无密码登录配置
发表评论