Hadoop有下列不同的服務:NameNode、JobTracker、DataNode、TaskTracker、SecondaryNameNode
其中NameNode、JobTracker只能有一台主要的機器來負責
一、測試環境
1、作業系統:Oracle Linux 6.2 x64
2、Virual Machine A:192.168.56.201(oel62n1) --> Master Host
3、Virual Machine B:192.168.56.202(oel62n2) --> Slave Host
4、作業系統只安裝文字介面
二、安裝Hadoop套件(兩台都安裝)
我是下載rpm:hadoop-1.0.3-1.x86_64.rpm
也可以下載tar檔,直接解壓就可以了
[root@oel62n1]# rpm -ivh hadoop-1.0.3-1.x86_64.rpm
[root@oel62n2]# rpm -ivh hadoop-1.0.3-1.x86_64.rpm
注意:如果像我前安裝並測試過sigle-node,最好就是把它刪除再重建,
不然會像我一樣,一直出問題,設定檔怎麼設定都是有錯。
(因為對設定檔還不夠了解啦!)
我刪除的步驟:
[root@oel62n1]# rpm -e hadoop-1.0.3-1.x86_64.rpm
[root@oel62n1]# rm -rf /etc/hadoop
[root@oel62n1]# rm -rf /var/log/hadoop
三、設定對應的主機名稱、SSH直接登入
1、編輯兩台的/etc/hosts
將兩台的hostname、ip各自填入兩台的hosts內,
oel62n1、oel62n2的/etc/hosts內容如下:
127.0.0.1 localhost localhost.localdomain
192.168.56.201 oel62n1 oel62n1
192.168.56.202 oel62n2 oel62n2
2、設定SSH直接登入,此步驟不要省略,以免後面啟動服務時要一直輸入密碼。
[root@oel62n1]# ssh-keygen -d
--所有選項都直接按下Enter鍵就好
[root@oel62n1]# ssh-copy-id -i ~/.ssh/id_dsa.pub root@oel62n2
自己本身也要免密碼登入:
[root@oel62n1]# ssh-copy-id -i ~/.ssh/id_dsa.pub root@oel62n1
測試看看是否直接進入oel62n2
[root@oel62n1 .ssh]# ssh oel62n2
測試看看是否直接進入oel62n1
[root@oel62n1 .ssh]# ssh oel62n1
四、兩台都要安裝JAVA(JDK)
[root@oel62n1]# rpm -ivh jdk-7u5-linux-x64.rpm
[root@oel62n2]# rpm -ivh jdk-7u5-linux-x64.rpm
五、設定Hadoop的masters、slaves參數檔(只有當master的host才需要)
我是以oel62n1為master:
[root@oel62n1]# vi /etc/hadoop/hadoop-env.sh
修改JAVA_HOME的位置如下:
export JAVA_HOME=/usr/java/jdk1.7.0_05
[root@oel62n1]# vi /etc/hadoop/masters
此參數檔是指定SecondaryNameNode的host,填入:
oel62n1
[root@oel62n1]# vi /etc/hadoop/slaves
此參數檔是指定其他當為node的host,填入:
oel62n1
oel62n2
六、設定Hadoop的參數檔(所有的host都要,內容都是指向master)
[root@oel62n1]# vi /etc/hadoop/core-site.xml
增加的內容如下:
scheme and authority determine the FileSystem implementation. The
uri's scheme determines the config property (fs.SCHEME.impl) naming
the FileSystem implementation class. The uri's authority is used to
determine the host, port, etc. for a filesystem.
[root@oel62n1]# vi /etc/hadoop/mapred-site.xml
增加的內容如下:
at. If "local", then jobs are run in-process as a single map
and reduce task.
[root@oel62n1]# vi /etc/hadoop/hdfs-site.xml
增加的內容如下(每一份在HDFS上面的資料會有幾份的複製):
The actual number of replications can be specified when the file is created.
The default is used if replication is not specified in create time.
以上是較簡單、快速的設定,其實hadoop還有許多的設定可以變化,有時間再測試看看。
七、格式化Namecode的HDFS filesystem
[root@oel62n1]# hadoop namenode -format
八、啟用/關閉Hadoop Cluster
只要在master host上執行:
開啟script
[root@oel62n1]# start-all.sh
關閉script
[root@oel62n1]# stop-all.sh
也可以依daemons開啟
[root@oel62n1]# start-mapred.sh
[root@oel62n1]# start-dfs.sh
也可以依daemons關閉
[root@oel62n1]# stop-mapred.sh
[root@oel62n1]# stop-dfs.sh
可以下jps的指令來觀察各daemons的狀態:
Master Host:
[root@oel62n1]# cd $JAVA_HOME/bin
[root@oel62n1]# ./jps
20853 DataNode
20463 NameNode
21200 Jps
20966 SecondaryNameNode
21156 TaskTracker
21036 JobTracker
Slave Host:
[root@oel62n2]# cd $JAVA_HOME/bin
[root@oel62n2]# ./jps
4356 TaskTracker
4431 Jps
4191 DataNode
也可以開啟網頁來檢視:
JobTracker:http://192.168.56.201:50030/
NameCode:http://192.168.56.201:50070/
Tasktracker:http://192.168.56.201:50060/
十、錯誤修改
第一次在開啟start-all.sh時並沒有成功,所以我查了一下log:
[root@oel62n1]# cat /var/log/hadoop/root/hadoop-root-datanode-oel62n1.log
[root@oel62n2]# cat /var/log/hadoop/root/hadoop-root-datanode-oel62n2.log
錯誤訊息大致如下,意指我的檔案權限不對:
2012-08-01 13:20:56,287 WARN org.apache.hadoop.hdfs.server.datanode.DataNode:
Invalid directory in dfs.data.dir: Incorrect permission for /tmp/hadoop-root/dfs/data,
expected: rwxr-xr-x, while actual: rwx------
修改檔案權限,兩台都要:
[root@oel62n1]# chmod 755 /tmp/hadoop-root/dfs/data
[root@oel62n2]# chmod 755 /tmp/hadoop-root/dfs/data
重新啟動後,又出現另一個錯誤,大致說我的namenode的id與記錄不符:
... ERROR org.apache.hadoop.dfs.DataNode: java.io.IOException:
Incompatible namespaceIDs in /app/hadoop/tmp/dfs/data: namenode namespaceID = 308967713;
datanode namespaceID = 113030094
修改namenode的id:
[root@oel62n1]# vi /tmp/hadoop-root/dfs/data/current/VERSION
--將namespaceID改為與log一樣
[root@oel62n2]# vi /tmp/hadoop-root/dfs/data/current/VERSION
--將namespaceID改為與log一樣
重新啟動後成功了。