hadoop,zookeeper HA
active/standby 描述的是namenode節點的狀態
leader,follow zookeeper zkServer.sh 的狀態
hdfs(檔案系統) namenode : 50070
datenode : 啟動的節點(50.96G)
啟動:sbin/hadoop-daemon.sh start/stop name/datenode
上傳: bin/hdfs dfs –put 檔案(路徑) / (位置)
下載: -get /(檔案路徑)
刪除: -rm –R / (檔案或資料夾路徑)
hadoop (叢集): start/stop-all.sh 啟動/停止所有以.sh結尾的程序
mapreduce: hadoop jar jar包名稱 /user/input/ (要執行的檔案路徑)
/user/phoneout1/ (輸出檔案路徑)
yarn(資源管理) resourcemananger : 8088
nodemananger
啟動:sbin/yarn-daemon.sh start/stop resource/nodemanager
Zookeeper(叢集) : 監視hadoop叢集執行,zookeeper叢集主要功能是實現少量資料(namenode裡的元資料)的分散式同步管理
叢集規劃:在3個節點上配置zookeeper,一個leader兩個follow
啟動/停止:bin/zkServer.sh start/stop
High Available(高可用):
已知導致服務可靠性不高的原因是namenode節點宕(dang:四聲,宕機)機,那麼怎麼才能避免這個namenode節點宕機呢?
一個容易想到的解決方案是部署兩臺namenode節點,形成主備模式(active/standby模式),這樣一旦active節點宕機,standby節點立即切換到active模式。
在各個NameNode節點上啟動先在哪臺機器啟動,哪個機器的NameNode就是Active NameNode
sbin/hadoop-daemon.sh start zkfc (從standBy到active)
響應客戶端請求的是active節點,因此只有active節點儲存了最新的元資料。元資料分為兩部分,一部分是剛寫入新的元資料(edits),另一部分是合併後的較舊的(fsimage)。HA機制解決同步問題的方法是將active節點新寫入的edits元資料放在zookeeper叢集上(zookeeper叢集主要功能是實現少量資料的分散式同步管理),standby節點在active節點正常情況下只需要將zookeeper叢集上edits檔案同步到自己的fsimage中就可以。
hadoop框架為這個叢集專門寫了個分散式應用qjournal(依賴zookeeper實現),實現qjournal的節點稱為journalnode。
如何避免腦裂?
standby namenode感知到主用節點出現異常後並不會立即切換狀態,zkfc會首先通過ssh遠端殺死active節點的 namenode程序(kill -9 程序號)。但是(這樣還不行,驚訝),如果kill指令沒有執行成功咋辦??如果在一段時間內沒有收到執行成功的回執,standby節點會執行一個自定義指令碼,儘量保證不會出現腦裂問題!這個機制在hadoop中稱為fencing(包括ssh傳送kill指令,執行自定義指令碼兩道保障