配置環境及有關工具:ubuntu10.04? 、hadoop0.20.2 、 jdk1.6.0_29
我們的機器有三臺,一臺當作namenode、兩臺當作datanode:
namenode:IP:192.168.0.25、機器名:kiddenzj (這里的機器名要注意:機器名不能包含下劃線“_”,一開始沒注意后來找了半天才發現這個原因)
datanode:IP:192.168.0.8 、機器名:kiddenxcc??
???????????????????? IP192.168.0.66、機器名: kiddenhw
集群里所有登陸的用戶名和密碼都要保持相同,我在這里創建了名為grid的用戶,后面的步驟就是在這個用戶下進行的。
配置步驟:
1)安裝ssh
輸入命令:
2)SSH配置
SSH配置主要是為了實現在機器間執行指令時不再需要輸入密碼,在所有的機器上建立.ssh目錄,這里我們建立在/home/grid下面:
然后在namenode機器上生成密鑰對,執行:
然后一直按Enter鍵,就會按照默認選項生成密鑰對保存在.ssh/id_rsa文件中。
繼續執行如下命令,把密鑰傳遞給每個datanode節點:
- cd?~/.ssh??
- cp?id_rsa.pub?authorized_keys??
- scp?authorized_keys?kiddenhw:/home/grid/.ssh??
- scp?authorized_keys?kiddenxcc:/home/grid/.ssh??
?然后分別在每臺datanode機器上執行如下命令,以改變authorized_keys文件的許可權限:
- chmod?644?authorized_keys??
到此,從namenode發起的到其他datanode節點的SSH連接,就會只需在第一次登錄是輸入密碼,以后則不再需要。
可以通過如下命令發起連接:
3)jdk的安裝(namenode機和datanode機均按此安裝)
下載jdk-6u29-linux-i586.bin,安裝到/usr/java下,cd到usr/java下,
- sudo?chmod?u+x?jdk-6u29-linux-i586.bin??
- sudo?./jdk-6u29-linux-i586.bin??
接下來要設置java的環境變量輸入命令:
- ?sudo?gedit?/etc/profile??
在文件的最后添加以下語句:
- JAVA_HOME=/usr/java/jdk1.6.0_29??
- ??
- export?JRE_HOME=/usr/java/jdk1.6.0_29/jre??
- ??
- export?CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH??
- ??
- export?PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH??
保存退出,然后執行source /etc/profile即可。
輸入java -version 命令,出現如下信息就表示配置成功
- java?version?"1.6.0_29"??
- Java(TM)?SE?Runtime?Environment?(build?1.6.0_29-b11)??
- Java?HotSpot(TM)?Server?VM?(build?20.4-b02,?mixed?mode)??
4)hadoop的安裝配置(只是在namenode端安裝配置,完成后namenode可以直接把配置好的hadoop發送到各個datanode端)
在這里,下載hadoop-0.20.2.tar.gz,然后解壓到/home/grid/下即可,
在hadoop文的件夾下需要建立幾個文件夾,如下:
(這里一開始沒有創建,結果查看運行信息的時候,雖然datanode節點都有進程在運行,但livenodes節點依然為0)
- mkdir?tmp??
- mkdir?hdfs??
- mkdir?hdfs/name??
- mkdir?hdfs/data??
接下來需要修改hadoop的conf文件夾下的配置信息:
修改hadoop-env.sh,加入如下語句,使得hadoop能夠找到java的路徑。:
- export?JAVA_HOME=/usr/java/jdk1.6.0_2??
修改core-site.xml,如下:
- <configuration>??
- <property>??
- <name>fs.default.name</name>??
- <value>hdfs:??
- </property>??
- </configuration>??
修改hdfs-site.xml,如下
- <configuration>??
- <property>??
- <name>dfs.replication</name>??
- <value>1</value>??
- </property>??
- </configuration>??
修改mapred-site.xml,如下:
- <configuration>??
- <property>??
- <name>mapred.job.tracker</name>??
- <value>kiddenzj:9001</value>??
- </property>??
- </configuration>??
masters里寫入作為namenode節點機器的名稱,我們這里是:kiddenzj
slaves里寫入作為datanode節點的機器名,這里是:kiddenhw和kiddenxcc
到此,hadoop的有關配置已經完成,namenode端通過如下命令把配置好的hadoop發送到各個datanode處:
- scp?-r?hadoop-0.20.2?kiddenhw:/home/grid??
- scp?-r?hadoop-0.20.2?kiddenxcc:/home/grid??
5)修改每臺機器上/etc下面的hosts文件,也就是寫入所有的機器名和對應IP地址(包括namenode和datanode節點),我們這里修改后如下:
- 127.0.0.1???localhost??
- 192.168.0.8????kiddenxcc??
- 192.168.0.25???kiddenzj??
- 192.168.0.66???kiddenhw??
6)
到此基本配置已經完成,在namenode端cd到hadoop文件夾下,格式化分布式文件系統:
- bin/hadoop?namenode?-format??
下面接著在namenode端啟動hadoop進程:
如果沒有其它差錯的話,hadoop可以正常啟動,并能夠看到如下結果:
在namenode端用jps命令查看啟動情況,如下:
- grid@kiddenzj:~/hadoop-0.20.2$?jps??
- xxxx?Jps??
- xxxx?Namenode??
- xxxx?Secondarynamenode??
- xxxx?JobTracker??
在datanode端用jps查看啟動情況,如下:
- grid@kiddenhw:~/hadoop-0.20.2$?jps??
- xxxx?Jps??
- xxxx?DataNode??
- xxxx?TaskTracker??
然后可以通過如下地址來查看集群運行狀況:
- ????http://kiddenzj:50030??
- ????http://kiddenzj:50070??
- <pre?name="code"?class="html">????http://kiddenhw:50060</pre>??
- <pre></pre>??
- <pre></pre>??
- <pre></pre>??
- <pre></pre>??
- <pre></pre>??
- <pre></pre>??
- ?????