上面的步驟,確認了單機能夠執行Hadoop的僞分佈執行,真正的分佈式執行無非也就是多幾臺slave機器而已,配置方面的有一點點區別,配置起來就很是簡單了。node
192.168.56.101nginx 192.168.56.102ubuntu 192.168.56.103服務器 |
在每臺機器的/etc/hosts中都將ip及hostname給映射上:ssh
192.168.56.101 nginx1分佈式 192.168.56.102 nginx2oop 192.168.56.103 nginx3字體 |
其中192.168.56.101爲前面配置的那臺服務器,用於作爲namenode及jobtracker,另外兩臺用於作slaves,用於執行datanode及tasktracker。spa
要使某臺服務器成爲namenode,必須在要core-site.xml中指定它;要使某個節點成爲jobtracker,必須在mapred-site.xml指定它,這個參見第5點中的core-site.xml以及mapred-site.xml的配置。.net
對Hadoop來講,從hdfs的角度來看有namenode及datanode,namenode只可以有一個,而datanode能夠有多個,namenode存放的是datanode中文件的元數據,客戶端經過namenode獲取datanode中文件的信息;從jobtracker角度來講看有jobtracker及tasktracker,jobtracker只可以有一個,而tasktracker能夠有多外,tasktracker經過jobtracker來調度。
在本例中使用192.168.56.101作爲namenode及jobtracker,使用192.168.56.102作爲secondarynamenode、datanode以及tasktracker,使用192.168.56.103作爲datanode以及tasktracker,詳情參見下面的配置。
1)、JDK的路徑必須相同;
2)、操做Hadoop的用戶必須相同;
3)、Hadoop的存放路徑必須相同;
Slave機器上的hadoop可直接將namenode上面的hadoop拷貝過去,不用作任何修改,只要路徑放置就能夠了;
4)、每臺機器~/.ssh目錄下存放相同的id_rsa及authorized_keys
將namenode的機器上的~/.ssh/id_rsa及authorized_keys拷貝到每臺slave機器上的~/.ssh中,固然slave機器中也必須是安裝了ssh的了,而後在每臺機器上都經過ssh訪問一下其它的兩臺機器,確保都是能夠不輸入密碼訪問的。
5)、三臺機器的/etc/profile中的內容相同;
這個文件存放的是全部datanode的IP或者機器名,每行指定一個。咱們這裏使用nginx2及nginx3來作爲datanode,所以slaves文件的配置以下:
nginx2 nginx3 |
masters文件中放置的是secondarynamenode的機器名,其中默認的內容爲「localhost」,可是在生產環境中,確定不會將namenode和secondarynamenode放置在同一臺服務器上,在此例中我就將secondarynamename設置在第二臺服務器上,那麼此時文件中的內容應該以下:
#這裏只使用一臺作爲secondarynamenode nginx2 #nginx3 |
只須要作簡單的修改就能夠了,不一樣點以紅色字體標識出。
core-site.xml:
<configuration> <property> <!-- 用於設置Hadoop的文件系統,由URI指定,value對應的服務器就是namenode所在的服務器及端口,secondarynamenode經過在masters這個文件中指定 --> <name>fs.default.name</name> <value>hdfs://nginx1:9000</value> </property> <property> <!-- 配置Hadoop的臨時目錄,默認在/tmp目錄下,可是/tmp上面可能會被系統自動清理掉。--> <name>hadoop.tmp.dir</name> <!-- 目錄若是不存在,須要手動建立 --> <value>/home/fenglibin/hadoop_tmp</value> <description>A base for other temperary directory</description> </property> </configuration> |
mapred-site.xml:
<configuration> <property> <!-- value對應的值爲jobtracker所在的服務器及端口,tasktracker在slaves中指定 --> <name>mapred.job.tracker</name> <value>nginx1:9001</value> </property> </configuration> |
hdfs-site.xml:
<configuration> <property> <!-- 指定其副本數,value的值表示副本的數量 --> <name>dfs.replication</name> <!-- 這裏有兩臺datanode --> <value>2</value> </property> </configuration> |
DataNode都是經過NameNode啓動起來的,於是啓動的時候只須要在NameNode上執行start-all.sh就能夠了,此時咱們查看各服務器中的進程。
Nginx1(NameNode)所在服務器:
fenglibin@ubuntu1110 :/usr/local/hadoop-1.2.1$ jps 2834 NameNode 3011 JobTracker 3108 Jps |
Ngnix2:
fenglibin@ubuntu11102:~$ jps 984 DataNode 1075 TaskTracker 919 SecondaryNameNode 1420 Jps |
Ngnix3:
fenglibin@ubuntu11103:~$ jps 1374 Jps 1021 TaskTracker 846 DataNode |
從上面的進程信息,能夠看到nginx1中啓動了namenode及jobtracker,,nginx2和nginx3都分別啓動了DataNode及TaskTracker,只是nginx2中比nginx3中多啓動了一個SecondaryNameNode,這也是咱們但願的結果。
經過以下命令:
hadoop dfsadmin -report |
可獲得以下輸出:
Warning: $HADOOP_HOME is deprecated.
Safe mode is ON Configured Capacity: 15283421184 (14.23 GB) Present Capacity: 10592149504 (9.86 GB) DFS Remaining: 10591629312 (9.86 GB) DFS Used: 520192 (508 KB) DFS Used%: 0% Under replicated blocks: 20 Blocks with corrupt replicas: 0 Missing blocks: 0
------------------------------------------------- Datanodes available: 2 (2 total, 0 dead)
Name: 192.168.56.102:50010 Decommission Status : Normal Configured Capacity: 7641710592 (7.12 GB) DFS Used: 307200 (300 KB) Non DFS Used: 2733502464 (2.55 GB) DFS Remaining: 4907900928(4.57 GB) DFS Used%: 0% DFS Remaining%: 64.23% Last contact: Sun Jun 15 15:46:39 CST 2014
Name: 192.168.56.103:50010 Decommission Status : Normal Configured Capacity: 7641710592 (7.12 GB) DFS Used: 212992 (208 KB) Non DFS Used: 1957769216 (1.82 GB) DFS Remaining: 5683728384(5.29 GB) DFS Used%: 0% DFS Remaining%: 74.38% Last contact: Sun Jun 15 15:46:39 CST 2014 |
查看namenode的狀態
namenode是佈署在192.168.56.101上,只須要輸入:
便可查看namenode的狀態,以下圖所示:
查看jobtracker的狀態
因jobtracker和namenode是佈署在同一臺機器上的,輸入:
便可查看jobtracker的狀態,以下圖所示:
查看secondarynamenode的狀態
Secondarynamenode是佈署在192.168.56.102上面,輸入:
便可查看其狀態,以下:
查看192.168.56.102上面的tasktracker的狀態,打入:
查看狀態,以下:
從上面能夠看出,監控的服務,都是以「500*」端口對外提供服務,不過這裏發現一個問題,同爲datanode以及tasktracker的192.168.56.103上面卻沒有開啓一個「500*」這樣的端口,而192.168.56.102上卻開啓除secondarynamenode以外的其它4個「500*」這樣的端口:
192.168.56.102:
其中端口50090是secondarynamenode的監控端口,而50060是tasktracker的監控端口,而50010、50075以及50020都是datanode使用的端口。
而在192.168.56.103上,卻只開了兩個端口:
分別與namenode以及jobtracker相連着的。
爲何在192.168.56.103上面tasktracker以及datanode的監控呢?