hbase环境依赖Hadoop和zookeeper,所以要十分注意 版本 对应和安装的方式集群等。Hadoop安装教程可以看 这个 .
我的环境:centos7,java 1.8.0_231,Hadoop 3.1.3,zookeeper 3.5.5,Hbase 2.1.3
遇见方式:当使用hbase shell命令,list或者create等命令时,出现此错误。
这个错误的原因有很多,我搞了一天,用了很多方式,所幸最后解决了。
可能原因:
同步时间命令:ntpdate 1.cn.pool.ntp.org
如果是单机运行或者伪分布式可以跳过了。
hbase.rootdir</name>
hdfs://localhost:9000/hbase</value>
# localhost是我的主机名,改成自己机器的主机名即可
</property>
zookeeper/bin目录下,运行如下命令,也可以查看log日志。
./zkServer.sh status
zookeeper默认端口2181被占,可能是防火墙阻挡
查看防火墙状态
firewall-cmd --state
停止firewall
systemctl stop firewalld.service
禁止firewall开机启动
systemctl disable firewalld.service
zookeeper/bin目录下,运行命令:
hbase zkcli
ls /
rmr /hbase
quit退出
重启hbase
5.Failed open of region=hbase:meta,1.1588230740 / NoClassDefFoundError: Could not initialize class
查看log确认是否有这句话。我最后居然在hbase-site.xml填加了一句话就解决了该问题,历尽千辛万苦啊~
ERROR [RS_OPEN_META-regionserver/hadoopserver:16020-0] handler.OpenRegionHandler: Failed open of region=hbase:meta,,1.1588230740
java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper
在hbase-site.xml中加这样一句,重启就好了
hbase.wal.provider</name>
filesystem</value>
</property>
方式一
zookeeper/bin目录下,运行命令:
hbase zkcli
ls /
rmr /hbase
quit退出
重启hbase
方式二
配置文件的hbase.zookeeper.property.dataDir目录下文件有问题,尝试删除。
方式三
删除该表在HBase系统表.META.中的记录。
scan 'hbase:meta', {STARTROW=>'表名', LIMIT=>30}
#limit大概意思是前多少行,要把row全整出来
#之后根据展示的数据删除row
delete '.META.','表名'具体数据云云
定位错误:jps查看是否缺少进程,我的是HMaster挂掉了
解决:1.查看Hadoop配置hadoop.tmp.dir路径。
2.删除tmp的文件。
3.格式化hadoop namenode -format;
重启
注意: 该方法会删除hdfs的数据!!!。Hadoop格式化可能导致name/current下的version中的clusterID和data/current下的version的clusterID不一致。将name的clusterID复制到data的clusterID使其一致即可。
半天关不掉,等不及了可以使用如下语句。
hbase-daemon.sh stop master
完后再输入stop-hbase.sh
注意: 最后记得jps检查下进程,有可能进程假死。kill掉
出现方式:list等hbase shell语句报错
解决:
1.先jps看下进程数量是否正确,若缺少则关掉重启
2.Hadoop安全模式打开了,运行如下命令
hadoop dfsadmin -safemode get#查看安全模式开启状态
hdfs dfsadmin -safemode leave
重启即可