你好,游客 登录 注册 搜索
背景:
阅读新闻

HBase file layout needs to be upgraded案例分析

[日期:2015-10-15] 来源:OpenSkill  作者: [字体: ]

大数据

今天在一个内网的测试环境平台,kafka的river插件状态非正常,然后同事只好重建kafka river,river的状态始终无法正常,没有办法,同事对服务还不是很熟悉,我只好帮忙看看了!

因为kafka 的river插件作为kafka消息数据的consumers角色,把消费掉的数据,通过Hbase转存储到hdfs中!

如下所示是river对hbase的配置:

<configuration>

<property>

 <name>hbase.rootdir</name>

 <value>hdfs://10.2.2.39:9000/hbase</value>

</property>

<property>

 <name>hbase.cluster.distributed</name>

 <value>true</value>

</property>

<property>

<name>hbase.master</name>

<value>10.2.2.39:60000</value>

</property>

<property>

 <name>hbase.zookeeper.quorum</name>

 <value>10.2.2.56,10.2.2.94,10.2.2.225</value>

</property>

</configuration>

从这可以看出river插件是需要hbase的,然后我执行创建river的命令,tail观看到hbase master的hbase-root-master-hbase1.log如下:

2015-10-14 17:34:13,980 INFO  [master:hbase1:60000] util.FSUtils: Waiting for dfs to exit safe mode...

从log中可以看出hbase在等待hdfs退出安全模式,为什么要等Hdfs退出安全模式呢?那下面就具体看看Hdfs的log中有什么线索,查看Hdfs的Namenode的hadoop-root-namenode-had1.log记录如下:

2015-10-14 17:33:52,283 ERROR org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException as:root (auth:SIMPLE) cause:org.apache.hadoop.hdfs.server.namenode.SafeModeException: Log not rolled. Name node is in safe mode.

运行如下命令等待退出安全模式

bin/hadoop dfsadmin -safemode wait

发现半分钟后没有反映,然后运行如下命令检查hdfs的健康状态

bin/hadoop fsck /

发现有很多corrupt blocks,不过还好备份数大于1.此时,hdfs需要自动的把备份数增加到2,所以需要对数据进行写操作,必须退出安全模式,于是:

bin/hadoop  dfsadmin -safemode leave

关闭之后等待集群把数据备份好,达到2,耐心等待一段时间吧,看数据量的大小,达到2之后,运行:

bin/hadoop  fsck -move

把那些破坏的块移到/lost+found这个目录下面,启动Hbase,发现Hmaster启动之后进程又消失了,查看日志:

2015-10-14 17:48:29,476 FATAL [master:hbase1:60000] master.HMaster: Unhandled exception. Starting shutdown.

org.apache.hadoop.hbase.util.FileSystemVersionException: 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'.

at org.apache.hadoop.hbase.util.FSUtils.checkVersion(FSUtils.java:600)

at org.apache.hadoop.hbase.master.MasterFileSystem.checkRootDir(MasterFileSystem.java:462)

at org.apache.hadoop.hbase.master.MasterFileSystem.createInitialFileSystemLayout(MasterFileSystem.java:153)

at org.apache.hadoop.hbase.master.MasterFileSystem.<init>(MasterFileSystem.java:129)

at org.apache.hadoop.hbase.master.HMaster.finishInitialization(HMaster.java:800)

at org.apache.hadoop.hbase.master.HMaster.run(HMaster.java:605)

at java.lang.Thread.run(Thread.java:744)

从什么log中可以发现可能是hbase.version文件消失了!我看很多网友的做法是先把/hbase清理调,然后重启就好了,但是以前的数据就丢失了,这有点不科学。于是我:

bin/hadoop -ls /hbase




发现/hbase/hbase.version确实已经消失了,这才恍然大悟,原来是之前的这个文件可能被损坏了,去/lost+found目录找确实能找到,但是这个文件似乎出了问题,-ls它也看不到。于是想到一个办法,我做了以下操作:

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

重启HBase,这时就生成了/hbase/hbase.version文件,然后:

bin/hadoop fs -cp /hbase/hbase.version /hbase.bk/



bin/hadoop fs -rmr /hbase 



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

这样再次重启HBase,发现Hbase开始splitting hlogs,数据得以恢复。然后再重建river,状态可以正常了!





收藏 推荐 打印 | 录入:elainebo | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款