重启HBase后,进入hbase shell 进行 scan 、get 、create等操作均报错:
scan 'table1'
ERROR: org.apache.hadoop.hbase.NotServingRegionException: org.apache.hadoop.hbase.NotServingRegionException: Region is not online: .META.,,1
at org.apache.hadoop.hbase.regionserver.HRegionServer.getRegion(HRegionServer.java:3154)
at org.apache.hadoop.hbase.regionserver.HRegionServer.getClosestRowBefore(HRegionServer.java:1974)
at sun.reflect.GeneratedMethodAccessor11.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.hbase.ipc.WritableRpcEngine$Server.call(WritableRpcEngine.java:364)
at org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java:1400)
查看日志,只发现如下警告,为什么呢?
WARN org.apache.hadoop.hbase.regionserver.wal.HLog: HDFS pipeline error detected. Found 2 replicas but expecting no less than 3 replicas. Requesting close of hlog.
找了很久才发现,原来是由于集群中各节点的时间不一致造成RegionServer启动失败:集群节点和master的时间误差阀值由hbase.master.maxclockskew参数设定的。
1.解决方法1,将参数值增加到5分钟
在hbase-site.xml添加配置
<property>
<name>hbase.master.maxclockskew</name>
<value>300000</value>
<description>Time difference of regionserver from master</description>
</property>
2.方案2
修改各结点时间,使其误差在30s内
参Linux 修改时间:
Linux 时间修改 不重启修改时区 一、修改linux的时间 root使用date指令:date -s 1、只修改日期,不修改时间,输入: Linux代码 1. date -s 2007-08-03 date -s 2007-08-03 2、只修改时间,输入: Linux代码 1. date -s 14:15:00 date -s 14:15:00 3、同时修改日期时间,注意要加双引号,日期与时间之间有一空格,输入: Linux代码 1. date -s "2007-08-03 14:15:00" date -s "2007-08-03 14:15:00" 4、修改完后,记得输入: Linux代码 1. clock -w clock -w 把系统时间写入CMOS 二、修改时区不重启 查看当前时区 date -R 在root下 1、复制相应的时区文件,替换系统时区文件: Linux代码 1. cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime 例如: Linux代码 1. cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 2、将当前时间和日期写入BIOS,避免重启后失效 Linux代码 hwclock --set --date "2013-01-24 11:22:44" 或者:(直接将当前系统时间写入BIOS) hwclock -w 3、将系统时间和硬件时间同步 hwclock –s 或 hwclock --hctosys |