hbase shell不能建立表的原因分析。
一.現象:
前一段時間 安裝了Hbase
hbase shell
進去之後 list status 命令都能夠正常運行。
但是執行建表語句 :
create 'aaa','bbb'
的時候 他就一直卡在那不動,也不報任何錯誤, 日誌裡面一直在刷如下的 debug日誌:
DEBUG org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation: Lookedup root region location, connection=org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@23faa614; serverName=
INFO org.apache.hadoop.hbase.master.ServerManager: Waiting on regionserver(s) to checkin
然後我進到 hive裡面 也是可以執行查看語句 但是不能建立表。
狀態就是 只能讀不能寫。
二.解決辦法:
namenode在啟動的時候首先進入安全模式,如果datanode丟失的block達到一定的比例,則系統會一直處於安全模式狀態即唯讀狀態。
dfs.safemode.threshold.pct(預設值0.999f)表示HDFS啟動的時候,如果DataNode上報的block個數達到了中繼資料記錄的block個數的0.999倍才可以離開安全模式,否則一直是這種唯讀模式。如果設為1則HDFS永遠是處於SafeMode。
有兩個方法離開這種安全模式
(1)修改dfs.safemode.threshold.pct為一個比較小的值,預設是0.999。
(2)hadoop dfsadmin -safemode leave命令強制離開
使用者可以通過dfsadmin -safemode value 來操作安全模式,參數value的說明如下: 1. enter - 進入安全模式
2. leave - 強制NameNode離開安全模式
3. get - 返回安全模式是否開啟的資訊
4. wait - 等待,一直到安全模式結束。
我採取的辦法是 強制離開安全模式。
進入hadoop 的bin目錄,
執行:
hadoop dfsadmin -safemode leave
然後我分別進入 hive 和 hbase
create 就可以 順利的執行了。