上一次在一台服务器成功完成了Linux Cent OS 5.0下 Hadoop伪分布式的安装。本次用3台服务器进行进一步测试,其中一台服务器做为master,namenode,jobtracker,其它两台做slave,datanode,tasktracker。

      此次环境搭建的方法与伪分布式基本一致,有几处不同:1. master namenode的/usr/local/hadoop/hadoop-0.20.2/conf目录下编辑slaves文件,加入两个datanode节点的ip;2. master 与slave1、slave2之间建立ssh无密码登录:首先在这三台服务器上用root 账户登录,在家目录下执行如下命令[root@master ~]# ssh-keygen  -t  rsa 自动在.ssh目录下生成私钥 id_rsa 和公钥 id_rsa.pub。将slave1与slave2生成的公钥copy到master的.ssh目录下并重命名为id_rsa.pub_slave1 和 id_rsa.pub_slave2 ,再将master自身生成的公钥 id_rsa.pub以及id_rsa.pub_slave1 和 id_rsa.pub_slave2 全部追加给authorized_keys: [root@master .ssh]# cat id_rsa.pub_slave1 >> authorized_keys ;cat id_rsa.pub_slave2 >> authorized_keys ;cat id_rsa.pub >> authorized_keys ;完成后,master通过ssh登录slave1和slave2就无需密码录了,这样做的好处是,当你在master上启动/bin/start-all.sh进程时,就不会提示让你输入datanode节点的密码,比较方便。

       其它的配置都无需做太多修改,在master namenode上搭建好环境后,可以将hadoop-0.20.2文件夹全部copy到slave1和slave2 的 /usr/local/hadoop/目录下。

       全部完成后,格式化文件系统 [root@master bin]# hadoop namenode -format,并在master节点/usr/local/hadoop/hadoop-0.20.2/bin启动进程start-all.sh。这里出现了两个小问题:1. 就是进程启动后不久,50070端口会自动关闭,且namenode进程也会关闭;2.在slave1和slave2上jps查看进程,datanode节点无法正常启动。多次尝试无果,咨询了博友峥狼,在此要感谢博友峥狼的无私帮助。

      下面说下这两个小问题的具体解决方法:1. 在master节点/usr/local/hadoop/hadoop-0.20.2/logs目录下查看了一下namenode的日志,发现报错17:14:43,330 ERROR
org.apache.hadoop.hdfs.server.namenode.NameNode: java.io.IOException:
Incomplete HDFS URI, no host: hdfs://master_namenode:54310。
按照峥狼说的方法,将原服务器名称master_namenode去掉下划线,统一改为纯字母。再重新格式化文件系统,重启进程,namenode正常启动。  2 . 关于slave节点datanode进程无法启动的问题,和伪分布式采用的解决方法一样,将/usr/local/hadoop/hdfs/data目录下的文件全部清空。再在master节点格式化文件系统,重启进程。在Web界面登录,可正常访问Hadoop运行界面。