记录一下,免得我又束手无策
利用importtsv向HBase批量插入数据 在上一篇博文里用importtsv向HBase中批量插入了数据。
用了一次之后就报错,报得错表面上看起来非常简单
ServerNotRunningYetException: Server is not running yet
百度了一下,有很多参考解决的方法
试了一下发现,手动关闭safemode不好用
> ./hdfs dfsadmin -safemode leave
显示关闭了,但是用命令一看
> ./hdfs dfsadmin -safemode get
safemode还是on的状态。
说明出现了一些情况,使得安全模式关不了。
但是为什么第一次能成功呢?我突然想到了上一篇参考文献
简书——使用importtsv导入CSV数据到HBase中的最后一句话
那么极有可能是我的目录下空间不够了。
> df -h
看一下,果然啊,root目录的占用已经达到了99%,看起来系统马上要炸了。怪只怪我自己把集群啊,JAVA啊,matlab啊都装在了root目录底下。网上对于这个root目录受不了了其实有很多的解决方法。包括从别的卷分一块区过来。
但对于我来说比较麻烦,那不如把这些东西都移动到别的盘上去好了,反正ubuntu系统只需要改一下环境变量及集群的一些配置文件就可以了。所以我就都给移走了。
现在我的root目录空间够了。
然后重新来,还是报错。
包括
ServerNotRunningYetException
org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
can’t get master address from ZooKeeper; znode data == null
太多问题了我都没来得及截屏
找其中一个问题来看一下
在master和slave上都jps一下,发现DataNode没有起来。
然后去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测试还是会有各种问题,包括输入命令没有反应,然后看日志报错
发现只要涉及到slave1的region就有问题。然后去master管理页面看一下
其实slave1是没有启动的。
看slave1 regionserver的日志
反正,只是照参考博文方法修改的hosts是没有用的。
那就还是映射的问题,仔细检查了一下slave1 上/etc/hosts文件,就是自己把slave1的地址输错了。
应该是192.168,输成了192.169,唉,粗心真的浪费了我很多时间。
可能还是未完待续吧,唉,这个运维真的太难了。这种基本入门级都算不上的运维我都搞不定。
【20200413】更新
今天测试了一下之前写过的HBase Coprocessor
动态加载表级coprocessor,然后HBase shell的命令就用不了了。不管是enable, list等等,都是connection refused报错,日志报错是
然后jps看了一下发现master和slave2上的HRegionServer都没能启动。
其实不用看日志也能比较明确是加载的coprocessor的问题,可能导致集群崩了,或者有什么inconsistency。用之前的方法检测,看数据块是否损坏检测数据块是否有损坏发现反馈是HEALTHY。
那就想着把加载了coprocessor的表test1直接删掉,至少让集群先起来再重新看看。
参考强制删除HBase表 步骤大概是
- 先去zookeeper客户端把表删掉,在zkcli里删除
> ./hbase zkcli
> delete /hbase/table/test1
- 在hdfs把表删掉
> ./hdfs dfs -rmr /hbase/data/default/test1
- 删掉表在’hbase:meta’中的记录
先查看表对应的rowkey,在HBase shell中scan META表
> scan 'hbase:meta'
- 删除rowkey下对应的三个字段
和参考博文一致即可 - 最后更新meta表信息
> major_compact 'hbase:meta'
删掉之后集群正常了,接下来要继续测试Coprocessor