当在hbase shell下创建表时,出现MasterNotRunningException异常,list、get等不能正常执行,通过Java API同样不能创建表,究其原因在于分布式文件系统处于安全模式状态下,执行 hadoop dfsadmin -safemode leave,重新启动hbase,问题即可解决。
Hadoop分布式文件系统为什么不自动退出安全模式呢?就让我们来看一下Hadoop安全模式吧。
namenode在启动的时候首先进入安全模式,如果datanode丢失的block达到一定的比例(datanode通过心跳包上报的block块数达到元数据记录的block块数的0.9990,系统会自动退出安全模式),则系统会一直处于安全模式状态即只读状态。默认情况下dfs.safemode.threshold.pct的值为0.999f。关于安全模式的命令:
hadoop dfsadmin -safemode get(获取安全模式是否开启)
hadoop dfsadmin -safemode leave(强制退出)
hadoop dfsadmin -safemode enter(进入)
hadoop dfsadmin -safemode wait(一直等待直到退出安全模式)