環境:
作業系統:CentOS 6.5 64bit
Hadoop:Version 1.2.1
Servers:hadoopnamenode,hadoop2ndnamenode,hadoopdatanode1,hadoopdatanode2
注:為方便起見,在這4臺server上,我都直接使用root賬戶進行操作
下載及環境變數設定:
在所有4臺server上:
從Apache網站下載hadoop-1.2.1-bin.tar.gz,解壓後放置在某個目錄下,我放在了/usr/local下,為方便起見,我把目錄hadoop-1.2.1改名為hadoop。
修改.bashrc,新增下面的環境變數:
export HADOOP_PREFIX=/usr/local/hadoop
export PATH=$PATH:$HADOOP_PREFIX/bin
配置hosts檔案:
在/etc/hosts中新增:
153.65.170.11 hadoopnamenode
153.65.170.45 hadoop2ndnamenode
153.65.171.174 hadoopdatanode1
153.65.171.24 hadoopdatanode2
配置ssh:
在hadoopnamenode上執行:
ssh-keygen//生成公鑰、私鑰
ssh-copy-id –i ~/.ssh/id_rsa.pub root@hadoop2ndnamenode//將hadoopnamenode的公鑰copy到其它三臺server上
ssh-copy-id –i ~/.ssh/id_rsa.pub root@hadoopdatanode1
ssh-copy-id –i ~/.ssh/id_rsa.pub root@hadoopdatanode2
這麼做的目的是可以不需要密碼從hadoopnamenode上ssh到其它三臺server上。經過ssh-copy-id後,這個公鑰實際上會被新增到其它三臺server的~/.ssh/authorized_keys檔案中。
例如要從hadoopnamenode登入hadoop2ndnamenode,其流程大概是:hadoop2ndnamenode向hadoopnamenode傳送一段隨機字串,hadoopnamenode用自己的私鑰加密後,再發回來。hadoop2ndnamenode用事先儲存的hadoopnamenode公鑰進行解密,如果成功,就證明使用者是可信的,直接允許登入shell,不再要求密碼。
配置Hadoop:
一般地,我們將使用下面的命令啟動hdfs(即name node, secondary name node, data node)及MapReduce:
/usr/local/hadoop/bin/start-dfs.sh
/usr/local/hadoop/bin/start-mapred.sh
start-dfs.sh的流程大概是這樣:
- 執行該命令的機器自動成為name node(以及job tracker),
- 啟動/usr/local/hadoop/conf /slaves中列出的所有機器並作為data node(以及task tracker),
- 啟動/usr/local/hadoop/conf /masters中列出的所有機器並作為secondary name node。
start-mapred.sh的流程類似:
- 執行該命令的機器自動成為job tracker,
- 啟動/usr/local/hadoop/conf /slaves中列出的所有機器並作為task tracker
注:conf/masters檔案往往給人帶來困惑,直觀上讓人覺得它是為配置name node所用,但是因為(1)的原因,name node是不需要特別配置到conf/masters中,需要配置的只有secondary name node。
根據以上描述,我們可以開始修改hadoopnamenode上的masters檔案,刪除原內容,新增一行:
hadoop2ndnamenode
修改hadoopnamenode上的slaves檔案,刪除原內容,新增兩行:
hadoopdatanode1
hadoopdatanode2
除此之外,需要在hadoopdatanode1與hadoopdatanode2上作出配置,使得data node知道name node,task tracker知道job tracker。所以分別修改hadoopdatanode1與hadoopdatanode2上的conf/core-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoopnamenode:10001</value>
</property>
</configuration>
及conf/mapred-site.xml:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hadoopnamenode:10002</value>
</property>
</configuration>
格式化name node:
在hadoopnamenode上執行:
hadoop namenode -format
啟動Hadoop:
首先,在hadoopnamenode上執行下面命令來啟動所有name node, secondary name node, data node:
start-dfs.sh
可以使用jps命令在4臺server上檢視當前執行的java程式,正常情況你會看到:
hadoopnamenode上有程式:NameNode
hadoop2ndnamenode上有程式:SecondaryNameNode
hadoopdatanode1/hadoopdatanode2上有程式:DataNode
其次,在hadoopnamenode上執行下面命令來啟動所有job tracker, task tracker:
start-mapred.sh
繼續使用jps命令在4臺server上檢視當前執行的java程式,正常情況你會看到:
hadoopnamenode上有程式:NameNode, JobTracker
hadoop2ndnamenode上有程式:SecondaryNameNode
hadoopdatanode1/hadoopdatanode2上有程式:DataNode, TaskTracker
關閉Hadoop:
在hadoopnamenode上:
stop-mapred.sh
stop-dfs.sh
其它:
Name node管理介面:http://hadoopnamenode:50070/
Job tracker 管理介面:http://hadoopnamenode:50030/