報錯現象
關閉HBase的時候,報錯:no hbase master found
但是此時我可以確定 HMaster 處於存活狀態,而且hadoop和zookeeper也都運行正常。
報錯原因
此時可以大體確定報錯原因,系統找不到HBase的pid文件,pid文件里面是HBase的進程號,找不到進程號系統就沒有辦法去結束這個進程。
HBase的pid文件默認存放路徑為 /tmp 路徑,可以進去看一下有沒有和HBase相關的文件。肯定沒有,因為很有可能被操作系統刪掉了。
報錯解決
(1)修改pid文件存放路徑
進入 /opt/hbase-2.0.0/conf 目錄,找到 hbase-env.sh 進行修改
將文件中的對應行修改(大約119行左右)
export HBASE_PID_DIR=/var/hbase/pids
路徑可以按照自己的習慣指定,但是一定要放在一個安全的地方,不要動不動就被linux系統抓了壯丁刪掉。
(2)暴力解決(測試環境使用)
直接kill掉HBase的相關進程,重啟服務就行了,重啟之后新的pid就會在指定目錄下生成,相同的問題以后也就不會出現了。
如果是測試環境可以使用這種簡單粗暴的方法,小幾率會造成丟數據或者HBase無法啟動的情況,但是解決問題簡單、快速。
(3)安全解決(生產環境使用)
如果節點機器上有HMaster、HRegionServer兩個進程,需要添加的文件如下:
hbase-root-master.pid
hbase-root-master.znode
hbase-root-regionserver.pid
hbase-root-regionserver.znode
如果節點機器上只有HRegionServer進程,需要添加的文件如下:
hbase-root-regionserver.pid
hbase-root-regionserver.znode
第一步:在HBase未關閉的情況下再去啟動HBase,使其生成pid存放目錄(主節點)
第二步:添加hbase-root-regionserver.pid文件(在包含HRegionServer的節點執行此操作)
查看HRegionServer的進程號,進程號就是pid文件里面的內容,直接復制進去保存。
將進程號記下來,去/var/hbase/pids目錄下創建一個名為 hbase-root-regionserver.pid 的文件,
將進程號37821(根據自己情況,不要復制我的)復制進去,保存退出。
第三步:添加hbase-root-regionserver.znode文件(在包含HRegionServer的節點執行此操作)
進入zookeeper客戶端:
[root@c202pc1 pids]# zkCli.sh
[zk: localhost:2181(CONNECTED) 8] ls /hbase/rs/c202pc1,16020,1593770260358 # 一直點Tab鍵(不要太死板,偶爾點個/鍵),就會出來一串字符
host:c202pc1
port:16020
startcode:1593770260358
去/var/hbase/pids目錄下創建一個名為 hbase-root-regionserver.znode 的文件,將/hbase/rs/c202pc1,16020,1593770260358(根據自己情況,不要復制我的)復制進去,保存退.出。
第四步:添加hbase-root-master.pid文件(在包含HMaster的節點執行此操作)
查看HRegionServer的進程號,進程號就是pid文件里面的內容,直接復制進去保存。
將進程號記下來,去/var/hbase/pids目錄下創建一個名為 hbase-root-master.pid 的文件,將進程號37693(根據自己情況,不要復制我的)復制進去,保存退出。
第五步:添加hbase-root-master.znode文件(在包含HMaster的節點執行此操作)
去/var/hbase/pids目錄下創建一個名為 hbase-root-master.znode 的文件,將c202pc1,16000,1593770258927(根據自己情況,不要復制我的)復制進去,保存退出。
host:c202pc1
port:16000
startcode:1593770258927 (這里隨便打幾個數字就可以,因為我沒有在zookeeper中找到這串字符,但是發現隨便輸入一串數字也不會報錯。)
第六步:重啟
先關HBase
再關Hadoop
再關Zookeeper
再按照相反順序啟動即可。