完全分布模式hadoop集群安裝配置之二 添加新節點組成分布式集群


前文說到如何搭建集群中第一個節點,這篇將說到如何向集群添加節點。這篇是基於前文的,沒有看過前文的可以參考此鏈接:http://www.cnblogs.com/mikelij/archive/2012/03/06/2380937.html

 

2 向集群添加節點

 

  前文已經建立了一個節點的hadoop集群。現在要做的添加節點。安裝JDK, 創建hadoop用戶等見前文。這里就不重復了。

 

2.1 檢查主機名,修改/etc/hostname, /etc/hosts

 

新節點需要在這個集群里叫一個名字,給此節點命名,比如slavenode1, slavenode2, etc.集群里新加入的服務器都需要在/etc/hostname中改名,將規定的服務器名放在/etc/hostname文件中。然后將已有服務器上的/etc/hosts拷貝過來。再加上此新節點的主機名。然后再復制到群里每一個服務器中。即所有集群中服務器的/etc/hosts文件要一樣。

 

2.2 配置SSH Key以便hadoop用戶無密碼登錄集群

 

  與前文不同的是,此處只需要將之前的節點產生的ssh key等拷貝過來就可以了。用hadoop用戶登錄,

sudo apt-get install ssh

安裝完ssh就可以從已有的服務器上拷貝ssh key了。

mkdir /home/hadoop/.ssh

scp hadoop@namenode:/home/hadoop/.ssh/* /home/hadoop/.ssh/

這就拷貝過來了。之所以要從已有服務器上拷貝ssh key,是因為如果兩個服務器的ssh key不一致,則第一次連服務器時,還是需要密碼的。這里的需求是hadoop用戶連任何一個集群中的服務器都不需要密碼,因此需要拷貝已有服務器上的ssh key.

下面需要從此節點用ssh命令連 到已有的所有節點上去。已有的節點只有一個時,假設本節點的主機名是slavenode1, 就ssh namenode, ssh localhost, ssh slavenode1。如果已經有namenode, slavenode1, slavenode2... 到slavenode6, 那么就嘗試ssh namenode, ssh slavenode1, ssh slavenode2, ..., ssh slavenode6, ssh localhost. 保證這些連接都是不需要密碼就可連接的就可以了。另外在換到其他機器上,都ssh 此節點的主機名,如ssh slavenode1s。這樣的方法,就可以保證每台機器間都可以用ssh無密碼就可以連接。用的用戶都是hadoop。

 

2.3 安裝hadoop包

   可參考前文的1.5, 這里就不重復了。

 

2.4 namenode上的hadoop配置

 

 集群里要加入新的節點,可以在namenode服務器上的mapred-site.xml中加入dfs.hosts和mapred.hosts兩個元素。即象這樣:

<property>
  <name>dfs.hosts</name>
  <value>/usr/local/hadoop/hadoop-0.20.203.0/conf/slaves</value>
</property>
<property>
  <name>mapred.hosts</name>
  <value>/usr/local/hadoop/hadoop-0.20.203.0/conf/slaves</value>
</property>

然后再在/usr/local/hadoop/hadoop-0.20.203.0/conf/slaves文件中寫上集群中所有的節點的主機名。一個主機名占一行。如:

namenode

slavenode1

slavenode2

...

如果dfs.hosts和mapred.hosts已經加好了,就只需要到slaves中加入一行。

 

2.5 新加入節點的hadoop配置

 

集群中所有節點的hadoop配置要全部保持一致。即那些core-site.xml, hdfs-site.xml, mapred-site.xml, masters, slaves可以從已有節點處拷貝過來。包括/etc/environment也可以從已有節點那里拷貝過來。用scp命令,上面已經用過了,再用scp拷貝這些文件過來。

 

2.6 新加入節點啟動

start-dfs.sh

start-mapred.sh

 

2.7 通知namenode和jobtracker有新節點加入

在第一台服務器(namenode兼jobtracker)運行的情況下,到第一台服務器那里,

hadoop dfsadmin -refreshNodes

這是通知hdfs有新節點加入

hadoop mradmin -refreshNodes

這是通知jobtracker有新節點加入

 

2.8 驗證集群是否正常工作

還是老辦法,用一些常用命令將一些服務器上的本地文件方到服務器上,如:

hadoop fs -put testfolder uploadfolder

再拷貝,刪除等做一做。

另外驗證jobtracker和所有的tasktracker是否正常工作,還是用wordcount示例來運行:

hadoop jar hadoop-examples-0.20.203.0.jar wordcount input output

得到大概這樣的結果就對了, 即map增長到100%, reduce也增長到100%。

訪問http://namenode:50070/ 可以看到集群里所有的datanode

還有http://namenode:50030/ 可以看到集群里所有的tasktracker

 

2.7 啟動集群

namenode上運行:

start-all.sh

slavenode上運行:

start-dfs.sh

start-mapred.sh

 

2.8 停止集群

slavenode上運行:

stop-mapred.sh

stop-dfs.sh

namenode上運行:

stop-all.sh

 

2.9 遇到的問題

Too many fetch-failures問題

這次還是遇到了這個問題,和單機時一樣的錯誤信息Too many fetch-failures,略有不同的是reduce不是卡在0%,而是卡在17%那里就不動了。

這次又是到處檢查,最后發現是第一台服務器的/etc/hosts文件里少寫了一個服務器名字。將這個服務器名字補上以后,這個wordcount示例就可以正常運行了。

所以集群中所有服務器的/etc/hosts, core-site.xml, hdfs-site.xml, mapred-site.xml, masters, slaves,還有ssh key所在.ssh目錄等文件和目錄都需完全一樣。

 

以上說的是往集群里添加節點,這里說的是添加第二個節點,此過程適用於以后所有新節點的添加。第三個一直到第n個都是按同樣的方法來添加。只要重復以上過程就可以了。

本文就說到這里。后文再說一些hadoop集群管理的內容。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM