Hodoop 伪分布式环境配置

一. 概要
经过几天的调试,终于在Linux Cent OS 5.5下成功搭建Hadoop测试环境。本次测试在一台服务器上进行伪分布式搭建。Hadoop 伪分布式模式是在单机上模拟 Hadoop 分布式,单机上的分布式并不是真正的伪分布式,而是使用线程模拟分布式。Hadoop 本身是无法区分伪分布式和分布式的,两种配置也很相似,唯一不同的地方是伪分布式是在单机器上配置,数据节点和名字节点均是一个机器。虽然Hadoop的安装步骤并不复杂,但是我在安装期间还是遇到了很多琐碎的问题,现将自己搭建Hadoop的详细过程和遇到的问题记录下来。完全分布式就是一个hadoop集群,有n台机器组成,一般组织方式是:一台机器作为master,上面 运行    namenode和jobtracker,另外的机器作为slave,上面运行datanode和tasktracker,至于secondaryname,可以运行在master上,也可以运行在另外一台机器上。secondaryname是namenode的一个备份里面同样保存了名字空间,和文件到文件块的map关系。建议运行在另外一台机器上,这样master死掉之后,还可以通过secondaryname所在的机器找回名字空间,和文件到文件块得map关系数据,恢复namenode。

二. 环境搭建
      搭建测试环境所需的软件包括:jdk1.6.0_20、hadoop-0.20.2.tar.gz。测试服务器操作系统Linux Cent OS 5.5。
网上说使用专门的用户hadoop操作,但是这里我是完全使用的root,方便而已。
总体的流程如下:
    1、实现linux的ssh无密码验证配置.
    2、在linux下安装jdk,并配好环境变量
    3、修改linux的机器名,并配置 /etc/hosts
    4、在windows下下载hadoop 0.20.0,并修改hadoop-env.sh,core-site.xml,hdfs-site.xml,mapred-site.xml,masters,slaves文件的配置
    5、把修改好的hadoop整个文件夹传到linux下
    6、把hadoop的bin加入到环境变量
    7、格式化hadoop,启动hadoop
    8、验证是否启动,并执行wordcount

具体如下:
   1.  SSH无密码验证配置
     Hadoop 需要使用SSH 协议,namenode 将使用SSH 协议启动 namenode和datanode 进程,伪分布式模式数据节点和名称节点均是本身,必须配置 SSH localhost无密码验证。
    用root用户登录,在家目录下执行如下命令:ssh-keygen -t rsa
[root@master ~]# ssh-keygen -t  rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):  & 按回车默认路径 &
Created directory '/root/.ssh'.  &创建/root/.ssh目录&
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
c6:7e:57:59:0a:2d:85:49:23:cc:c4:58:ff:db:5b:38 root@master
     通过以上命令将在/root/.ssh/ 目录下生成id_rsa私钥和id_rsa.pub公钥。进入/root/.ssh目录在namenode节点下做如下配置:
[root@master .ssh]# cat id_rsa.pub > authorized_keys
配置完毕,可通过ssh 本机IP 测试是否需要密码登录。
原理:
Hadoop需要使用SSH协议,namenode将使用SSH协议启动namenode和datanode进程,(datanode向namenode传递心跳信息可能也是使用SSH协议,这是我认为的,还没有做深入了解)。许多教程上介绍Hadoop集群配置时只说明了namenode上SSH无密码登录所有datanode,我在配置时发现必须使datanode上也能SSH无密码登录到namenode,Hadoop集群才能正常启动(也许这不是必须的)
以namenode到datanode为例子:Namenode作为客户端,要实现无密码公钥认证,连接到服务端datanode上时,需要在namenode上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到datanode上。当namenode通过ssh连接datanode时,datanode就会生成一个随机数并用namenode的公钥对随机数进行加密,并发送给namenode。namenode收到加密数之后再用私钥进行解密,并将解密数回传给datanode,datanode确认解密数无误之后就允许namenode进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端namenode公钥复制到datanode上

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

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