試驗環境:
本地:MyEclipse
集群:Vmware 11+ 6台 Centos 6.5
Hadoop版本: 2.4.0(配置為自動HA)
試驗背景:
在正常測試MapReduce(下簡稱MR)程序4次之后,進行一次新的MR程序,MyEclipse的控制台信息卡住不動了,我通過遠程連接NameNode查看系統目錄也被卡住,這時候再看MyEclipse控制台,發現已經拋出異常如下:
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.StandbyException): Operation category READ is not supported in state standby
通過Web頁面查看兩個NameNode狀態,均已經變成Standby,這讓我很是奇怪,在自動故障恢復的集群配置下,竟然也會有全部變成備用的情況出現.
防止有人無常拷貝:加個作者鏈接:http://www.cnblogs.com/hadoop2015/
解決方法:
方法1:(結果不起作用)
我通過Shell命令方式,hadoop/bin/hdfs haadmin -failover --forceactive hadoop2 hadoop1(注意,這種方式本來是在手動故障恢復中進行強制切換NameNode的做法)
返回結果,不支持,並且誠懇的提示,這種方式是在手動故障轉移的情況下,該命令才會起作用
方法2:(奏效)
我使用JPS檢查了一下ZooKeeper集群的狀態,發現沒有任何征兆的失效了兩個,原來是ZK的原因,於是重新啟動ZK集群
然后重新啟動ZKFailoverController(DFSZKFailoverController):沒有這個角色存在,自然不會自動切換NameNode了
得到的教訓,雖然NameNode通過HA機制,已經比Hadoop1可靠了,但是ZK集群一定要保證數量,我僅僅設置了三個節點的ZK集群,而ZK集群的可靠要保證:活動的ZK節點數量>(ZK節點總數-1)/2.所以,多多的設置ZK集群的節點才是王道.