一個4節點Hadoop叢集的配置示例

Morven.Huang發表於2014-12-30

環境:

作業系統: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的流程大概是這樣:

  1. 執行該命令的機器自動成為name node(以及job tracker),
  2. 啟動/usr/local/hadoop/conf /slaves中列出的所有機器並作為data node(以及task tracker),
  3. 啟動/usr/local/hadoop/conf /masters中列出的所有機器並作為secondary name node。

start-mapred.sh的流程類似:

  1. 執行該命令的機器自動成為job tracker,
  2. 啟動/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/

 

相關文章