這個問題困擾了我一天多的時間,百度搜索的前幾條的答案也是很扯淡的,說什么把/etc/hosts文件下的127.0.1.1改成127.0.0.1就行了,我也只能呵呵了。今天早上起得很晚,中午迪哥請我們去吃完水餃后就一直在解決這個問題,下面的這兩篇文章對我幫助很大: http://www.cnblogs.com/wukenaihe/archive/2013/03/15/2961029.html http://www.chenyudong.com/archives/linux-ntpdate-time-synchronize.html 總的說來就是因為hadoop集群各節點的時間不一致造成的,同步之后有一個節點的時間竟然差了27437秒,這必然導致hbase數據庫的shell運行失敗,其余的幾個節點也多多少少有些時差,我就不一一截圖了。
每次在$HBASE_HOME目錄下啟動bin/hbase shell就會報錯。看到這個報錯信息的時候我就非常奇怪,什么叫PleaseHoldException:Master is initializing? 請等一等,主節點正在啟動ing。要我等可以啊,但總不能每次等完就直接掛啊。后來谷歌報錯信息,很多人都是通過查看日志信息來分析的。忘了說了,我用的hadoop版本是2.5.2(本來是2.7.1,但是hbase官網說目前只有hbase1.2.x支持,可是hbase1.2.x官方還沒給下載鏡像,我也是日了狗了),hbase版本是1.1.2。通過ssh連接至slave1上查看RegionServer日志
這是用cat hbase-grid-regionserver-Slave1.log | grep sync 命令輸出的部分結果,其中的幾個關鍵詞:clock out of sync,the fifference of 68394ms > max allowed 30000ms, ClockOutOfSyncException。可以看出hbase數據庫 shell運行失敗的原因大概就是時鍾不同步了。
參考我給出的第二篇博客的連接,安裝ntpdate, sudo apt-get install ntpdate后,運行shell命令:ntpdate 0.cn.pool.ntp.org 這個命令很簡單,參數可以選擇任意一個時間服務器的地址,然后重啟hbase數據庫:bin/stop-hbase.sh bin/start-hbase.sh 即可。可能會出現 can't get master address from ZooKeeper錯誤,這可能是由於ZooKeeper不穩定造成的,我試着又重啟了一下,就可以了。
可以看到,輸入list命令,沒有報PleaseHoldException的錯了。