记录一下,免得我又束手无策
利用importtsv向HBase批量插入数据 在上一篇博文里用importtsv向HBase中批量插入了数据。
用了一次之后就报错,报得错表面上看起来非常简单
ServerNotRunningYetException: Server is not running yet
百度了一下,有很多参考解决的方法
试了一下发现,手动关闭safemode不好用

> ./hdfs dfsadmin -safemode leave

显示关闭了,但是用命令一看

> ./hdfs dfsadmin -safemode get

safemode还是on的状态。
说明出现了一些情况,使得安全模式关不了

但是为什么第一次能成功呢?我突然想到了上一篇参考文献

简书——使用importtsv导入CSV数据到HBase中的最后一句话

hbase报错大全 hbase list报错_hbase报错大全


那么极有可能是我的目录下空间不够了。

> df -h

看一下,果然啊,root目录的占用已经达到了99%,看起来系统马上要炸了。怪只怪我自己把集群啊,JAVA啊,matlab啊都装在了root目录底下。网上对于这个root目录受不了了其实有很多的解决方法。包括从别的卷分一块区过来。

但对于我来说比较麻烦,那不如把这些东西都移动到别的盘上去好了,反正ubuntu系统只需要改一下环境变量及集群的一些配置文件就可以了。所以我就都给移走了。

现在我的root目录空间够了。

hbase报错大全 hbase list报错_数据_02


然后重新来,还是报错。

包括

ServerNotRunningYetException

org.apache.hadoop.hbase.PleaseHoldException: Master is initializing

can’t get master address from ZooKeeper; znode data == null

太多问题了我都没来得及截屏

找其中一个问题来看一下

在master和slave上都jps一下,发现DataNode没有起来。

hbase报错大全 hbase list报错_解决方法_03


然后去50070上看一下集群情况,发现了很重要的信息

有一些missing block

而且HBase的日志里有报错

NotServingRegionException

照这个报错,应该是之前HBase崩掉的时候导致了Region数据的损坏。

找到相关博文,NotServingRegionException 也就是说,数据有损坏,然后HBase直接就起不来了?因吹斯听。按照他的方法,把损坏的数据都清了,然后重新来。就正常了。

其实解决不是问题,问题是他为什么不行了?

继续,又碰到一个问题,slave1的HRegionServer怎么都起不来,起不来,起不来,赖床狗。

去slave1的日志,/hbase/logs/regionserver-slave1.log看是什么情况,报错

hbase regionServer Cannot assign requested address

感觉是连接的问题

jps结果

hbase报错大全 hbase list报错_hdfs_04


但是,其实这是一个“假”启动。去HBase测试还是会有各种问题,包括输入命令没有反应,然后看日志报错

hbase报错大全 hbase list报错_数据_05


发现只要涉及到slave1的region就有问题。然后去master管理页面看一下

hbase报错大全 hbase list报错_hdfs_06


其实slave1是没有启动的。

看slave1 regionserver的日志

hbase报错大全 hbase list报错_hbase报错大全_07


反正,只是照参考博文方法修改的hosts是没有用的。

那就还是映射的问题,仔细检查了一下slave1 上/etc/hosts文件,就是自己把slave1的地址输错了。

应该是192.168,输成了192.169,唉,粗心真的浪费了我很多时间。

可能还是未完待续吧,唉,这个运维真的太难了。这种基本入门级都算不上的运维我都搞不定。

【20200413】更新
今天测试了一下之前写过的HBase Coprocessor

动态加载表级coprocessor,然后HBase shell的命令就用不了了。不管是enable, list等等,都是connection refused报错,日志报错是

hbase报错大全 hbase list报错_hdfs_08


然后jps看了一下发现master和slave2上的HRegionServer都没能启动。

其实不用看日志也能比较明确是加载的coprocessor的问题,可能导致集群崩了,或者有什么inconsistency。用之前的方法检测,看数据块是否损坏检测数据块是否有损坏发现反馈是HEALTHY。

那就想着把加载了coprocessor的表test1直接删掉,至少让集群先起来再重新看看。

参考强制删除HBase表 步骤大概是

  1. 先去zookeeper客户端把表删掉,在zkcli里删除
> ./hbase zkcli
> delete /hbase/table/test1
  1. 在hdfs把表删掉
> ./hdfs dfs -rmr /hbase/data/default/test1
  1. 删掉表在’hbase:meta’中的记录
    先查看表对应的rowkey,在HBase shell中scan META表
> scan 'hbase:meta'
  1. 删除rowkey下对应的三个字段
    和参考博文一致即可
  2. 最后更新meta表信息
> major_compact 'hbase:meta'

删掉之后集群正常了,接下来要继续测试Coprocessor