[Hbase错误]-----删除DataNode的坏块后,启动Hbase报错找不到hbase.version文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengtanyong4777/article/details/87917569

1.前言

在服务器上搭建了伪分布式集群,由于重启服务器的时候没有在Ambari正常关闭集群,相当于直接断电,集群非正常关闭。

而后使用Ambari启动HDFS的时候,发现出现了Missing block的提示。

在解决完Missing block的后,启动Hbase的时,发现Hbase的Hmaster开启后又马上闪退。

2.问题

检查Hbase的日志后发现报如下错:

HBase file layout needs to be upgraded. You have version null and I want version 8. Consult http://hbase.apache.org/book.html for further information about upgrading HBase. Is your hbase.rootdir valid? If so, you may need to run 'hbase hbck -fixVersionFile'

3.解决

通过查阅资料得知,出现这种原因是因为集群非正常关闭后,出现的missing block中可以包括hbase的version文件,但是由于missing block全部被我删除了,所以已经找不回hbase.version文件了。

百度上有很多网友提出直接将hdfs上的hbase文件夹删除,重启hbase即可。这种办法虽然可以解决问题,但是会导致所有的hbase上的原数据全部丢失,所以在生产环境上要慎重!!!

【划重点】

为了不删除hdfs上hbase的原数据,我们可以通过如下方式,让hbase重新生成一个hbase.version文件。

(1)可以通过浏览器登录hdfs文件系统 http://master:50070,查看hbase文件夹的路径,以便后续操作

由于我是通过ambari搭建的集群,所以所有的文件都是ambari默认创建的。下图所示的正常时候的hdfs上hbase里面的文件,有问题的时候是没有hbase.version文件的。

(2)知道hbase的文件夹路径之后,首先我们将hbase的文件夹名字修改成hbase.tmp

hadoop fs -mv /apps/hbase /apps/hbase.tmp

(3)然后重启Hbase,即可发现hdfs上又会重新生成一个Hbase的文件夹,这时候查看新生成的hbase文件夹,发现里面有hbase.version文件。太nice了!所以这时候,就可以很不要脸的将新生成的hbase.version文件拷贝到hbase.tmp文件夹对应的位置中

hadoop fs -cp /apps/hbase/data/hbase.version /apps/hbase.bk/data/  ←【别漏了最后一个/】

(4)拷贝完hbase.version文件后,删除新生成的hbase文件夹

hadoop fs -rmr /apps/hbase 

(5)删除后新生成的hbase文件夹后,将hbase.tmp文件夹名改成hbase

hadoop fs -mv /apps/hbase.bk /apps/hbase

(6)重启hbase就大功告成了!

4.感想

出现这种问题的根本原因还是因为在处理hdfs出现missing block的时候,我是直接将所有的bad block全部删除掉,感觉这样会导致数据的丢失,所以有关于这种情况的处理我现在还在探究中,后续会写一篇关于这种情况的应对方式,希望能和大家一起学习,一起进步吧。

猜你喜欢

转载自blog.csdn.net/chengtanyong4777/article/details/87917569
今日推荐