一、完全分布式集群环境的搭建
1、配置hosts文件:将三台集群服务器的主机名与IP的对应关系互相配置到对方的hosts文件中,以便对方服务器能通过主机名寻找IP,hosts文件在/etc目录下。
2、建立hadoop运行账号,这个就不说了。
3、配置ssh免密码连入,配置这个地方可能会出现问题,具体细节看上一篇博客。
4、下载并解压hadoop安装包,需要说明的是最好是先chmod更改一下权限,使用tar xzvf 包名 来解压。
5、在namenode节点上配置hadoop:
(1)修改~/hadoop-0.20.2/conf目录下的core-size.xml文件内容,用来配置namenode节点IP和断口,如下:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://namenode服务器ip地址:9000</value>
</property>
</configuration>
(2)修改~/hadoop-0.20.2/conf目录下的hdfs-site.xml文件内如,用来配置备份数据的份数,如下:
<configuration>
<property>
<name>dfs.replication</name>
<value>2(数据备份两台服务器)</value>
</property>
</configuration>
(3)修改~/hadoop-0.20.2/conf目录下的mapred-site.xml文件内容,用来配置jobtracker服务器的IP和断口,如下:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>jobtracker服务器的IP地址:9001</value>
</property>
</configuration>
(4)修改~/hadoop-0.20.2/conf目录下的masters和slaves文件,masters文件中写namenode节点和jobtracker节点的主机名,slaves文件中写datanode和tasktracker的主机名。
(5)修改~/hadoop-0.20.2/conf目录下的hadoop-env.sh文件,修改hadoop的jkd环境变量,找到export JAVA_HOME这一行,取消注释,更改jdk安装路径。
(6)将修改完成后的hadoop-0.20.2目录复制到另外两台datanode节点上,我是复制安装包过去解压,namenode上配置好了之后,将其conf目录复制过去覆盖即可。
(7)格式化分布式文件系统:
A、cd ~/hadoop-0.20.2/
B、bin/hadoop namenode -format
C、当有“successfully formatted”等字符出现时,表面格式化成功。
(8)在namenode节点的hadoop解压目录下执行命令:bin/start-all.sh,即可启动namenode进程、jobtracker进程、secondarynamenode进程、datanode进程、tasktracker进程。在namenode节点下使用:~/jdk1.6.0_45/bin/jps命令,可以看到启动了NameNode进程、JobTracker进程、econdaryNameNode进程和Jps进程。在datanode节点下使用该命令,可以看到启动了DataNode进程、TaskTracker进程和Jps进程。
二、完成分布式搭建后出现的问题。
按照上面的步骤,是搭建成功了的,使用JPS命令,也看到对应的守护进程启动了的。可以第二天过来再次用start-all.sh脚本启动进程的时候发现悲剧了,namenode进程和jobtracker进程没有起来,SecondaryNamenode进程倒是跑起来了。在看datanode节点,发现DataNode进程和TaskTracker进程倒是起来了。然后就是逐步解决问题,步骤如下:
1、NameNode节点没有启动,用hadoop namenode -format命令格式化namenode节点,之后再次启动,发现NameNode进程启动了,但是JobTracker进程没有启动。
2、继续,删除/tmp目录下的文件,因为进程启动后会生成一些文件默认存放在/tmp目录下,然后删除~/hadoop-0.20.2/data目录下的所有内容,使用stop-all.sh脚本关闭所有进程后再次启动所有进程,发现NameNode进程和JobTracker进程起来了,再到datanode节点下看看,发现DataNode节点没有起来,悲剧!!
3、继续排错,发现好像是因为格式化namenode次数过多,datanode节点上存放的还是之前的namenodeID,所以删除datanode节点下~/hadoop-0.20.2/data目录下所有内容,再次重启namenode节点上的守护进程,namenode没问题,datanode也没问题,ok终于搞定。
三、注意事项:
1、可以不用配置hosts文件,在master、slave文件中给出具体IP就行。
2、在真实集群环境中,使用以下几步替换上面的几个步骤:
(1)使用DNS服务器的域名解析功能来替代修改hosts文件。
(2)使用NFS实现密钥共享,替换ssh免密码登录。
(3)使用awk工具编写脚本,批量复制hadoop。