之前安裝Hadoop時發現如果有太多的cluster,
就要將Hadoop複製一份放到這些node上面
一開始兩三台還好,那如果改成兩三百台就會死很慘
因此就開始試著想要把Hadoop放在NFS上面(Network File System)
如此一來我只需要建構一份Hadoop System
而其他的Node只要透過NFS 掛載Hadoop Server就好了!
我的方法是:擁有Hadoop0~Hadoop4五台機器
Hadoop0 是前端的server,Hadoop安裝在/usr/local/hadoop底下
安裝NFS Server請參考 這邊
NFS Server安裝完成後,就可以把Hadoop Mount到slave的node底下了
For Hadoop1~4
$> sudo mount hadoop0:/usr/local/haddop /usr/local/hadoop
//因為路徑要設一樣,所以我們把NFS mount的資料夾一樣放在/usr/local底下
(這邊避免還要ssh到另外四台的麻煩,可以使用pdsh指令,詳細請參考 這邊 )
$> sudo pdsh -R ssh -w hadoop[1-4] mount hadoop0:/usr/local/hadoop /usr/local/hadoop
注意:若要使用pdsh,要先安裝pdsh
注意:若要使用mount指令,請先檢查hadoop0的/etc/exports有沒有設定以及hadoop1~4有沒有要mount的資料夾
$> pdsh -R ssh -w hadoop[1-4] mkdir /usr/local/hadoop
接著還要記得設定NIS Server (Network Information Service)
NIS Sever的意思是讓所有的node擁有一樣的帳號密碼
詳細設定請參考 這邊
設定完成後確保hadoop0可以以root的身份ssh到各個node
接著就可以啟動Hadoop了!
-----------事情要是這麼簡單就好了-------------
然後就會發現Hadoop會無法啟動
我的猜測是因為Hadoop預設會將log寫到hadoop的資料夾底下
但又因為我們是掛nfs
log就等於寫到同一個資料夾底下了
這樣子hadoop好像就無法正常啟動
因此我的解決方法是將hadoop的log dir寫到各台機器自己的/tmp資料夾底下!
$> vim /usr/local/hadoop/conf/hadoop-env.sh
然後加上:
export HADOOP_LOG_DIR=/tmp/hadoop
接著重新執行hadoop應該就可以work了!!