我一开始运行jar包,出现一下问题,仔细一看是节点没有启动,就去启动hbase看看

hbase lz4 报错 hbase server is not running_hadoop

但是,进入hbase后,输入命令会有如下报错,

hbase lz4 报错 hbase server is not running_hadoop_02

到网上搜了一下,说是hadoop进入了安全模式,所导致的,把关了就行,

一般都是数据块损坏导致进入了安全模式,这时候,

1、可以选择强制退出安全模式,

2、或者修改配置文件hdfs-site.xml,降低进入安全模式的阈值

默认值是0.999,将值该小就行

<name>dfs.namenode.safemode.threshold-pct</name>
<value>o.999f</value>

退出安全模式后,重启hbase的服务,进入之后,输入命令,又出现了如下的错误

hbase lz4 报错 hbase server is not running_hadoop_03

然后去查看hbase的日志文件,下面4个都可以看一下,查看后200行就可以

tail -n 200 xxx

hbase lz4 报错 hbase server is not running_hadoop_04

后来在日志文件中查出如下错误

hbase lz4 报错 hbase server is not running_apache_05

是数据丢了。

没错,一开始进入安全模式的原因就是数据块损坏丢失了,丢的正好是hbase的,所以导致hbase不能正常使用

使用下面命令,查看丢失的数据块

// 执行以下命令查看是否有块缺失
hdfs fsck /

查出数据如下,可以看到丢失的块数,可数据的大小

hbase lz4 报错 hbase server is not running_数据块_06

通过如下命令,查看丢失数据块的位置

hdfs fsck -list-corruptfileblocks 效果如下,因为我都删除了,所有没有了路径,不然是有路径的

hbase lz4 报错 hbase server is not running_apache_07

找到损坏文件的位置之后,你可以选择删除,也可以恢复,

这里我选择的是删除

rm 后面的就是找出来的损坏文件的位置,直接删除,进入回收站

hdfs dfs -rm /hbase/oldWALs/singlenode%2C16020%2C1631667766083.1631682195417

删除结束后,在运行命令看看,有没有损坏的数据块

hdfs fsck /

如下图就是没有损坏的数据块了

hbase lz4 报错 hbase server is not running_数据块_08

随后,关闭所有服务,然后重启就可以了