一、完全分布式集群環境的搭建
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。