hbase集群断电数据被破坏无法启动
2016-10-26 10:09
176 查看
集群机器意外断电重启,导致hbase 无法正常启动,抛出reflect invocation异常,可能是正在执行的插入或合并等操作进行到一半时中断,导致部分数据文件不完整格式不正确或在hdfs上block块不完整。
在网上查了一下相关资料,怀疑有可能是关闭前一些未提交的修改所存放的log文件数据写入一半文件不完整,故把hbase.hlog.split.skip.errors改成true进行尝试。
关于这个参数作用的解释:
当服务器奔溃,重启的时候,会有个回放的过程,把/hbase/WAL/下面记录的log都回放一遍,合并到每个region中,回放过程中如果有error发生,这个参数又是false,那么exception就会向外层输出,回放失败。
但是很遗憾,将此参数修改后hbase集群仍然无法正常启动。
然后就琢磨其他原因,先观察hbase启动时的60010监控页面,
发现部分region FAILED_OPEN错误,its007-meta表一共200个region,只启动成功199个。
似乎想到了什么,对了,很可能是这个region的数据文件格式不正确,那就先检查一下其在hdfs上的文件是否正常。
果不其然,观察hadoop的50070页面,会提示hadoop文件系统的具体路径上有两个数据块出错。
(关于hbase在hdfs上的目录相关文章链接:HBase在HDFS上的目录树)
解决方法:
1. 运行hadoop fsck / -files检查hdfs文件
2. 发现/hbase/oldWALs目录下有一个文件损坏,
运行hadoop fsck / -delete清除损坏的文件
3. 运行hbase hbck -details查看hbase概况,发现Table its007-meta有一个region加载失败
4. 运行hbase hbck -fixMeta尝试修复系统元数据表
5. 运行hbase hbck -fix尝试修复region数据不一致问题。
6. 再次运行hbase hbck -details发现问题仍然未修复,那个region仍然加载失败。
故直接将该region下出错的文件移走,暂时移至hdfs根目录
hadoop fs -move /hbase/data/default/its007-meta/fe6463cba743a87e99f9d8577276bada/meta/9a853fdbe13046fca194051cb9f69f9b /
fe6463cba743a87e99f9d8577276bada是region的名字
9a853fdbe13046fca194051cb9f69f9b是region下出错的HFile,有800k大小(注:一个region下可以有多HFile)
7. 运行hbase hbck -fix重新加载之前失败的region,至此完成修复,丢弃了出错的HFile
总结:
hbase在hdfs上一共两个文件损坏。(关于hdfs文件写入相关文章:hdfs文件写入相关概念)
一个是oldWALs下的,这个是存放一些没用的HLog文件的,这里有文件损坏,说明从WALs中转移没用的HLog写到oldWALs下时,写了一半断电导致hdfs上文件数据块出错;
另一个是region下一个HFile文件损坏,这个文件800k比较小,应该是从Memstore flush到HFile时,写了一半没写完导致其在hdfs上的文件数据块出错。
在网上查了一下相关资料,怀疑有可能是关闭前一些未提交的修改所存放的log文件数据写入一半文件不完整,故把hbase.hlog.split.skip.errors改成true进行尝试。
关于这个参数作用的解释:
当服务器奔溃,重启的时候,会有个回放的过程,把/hbase/WAL/下面记录的log都回放一遍,合并到每个region中,回放过程中如果有error发生,这个参数又是false,那么exception就会向外层输出,回放失败。
但是很遗憾,将此参数修改后hbase集群仍然无法正常启动。
然后就琢磨其他原因,先观察hbase启动时的60010监控页面,
发现部分region FAILED_OPEN错误,its007-meta表一共200个region,只启动成功199个。
似乎想到了什么,对了,很可能是这个region的数据文件格式不正确,那就先检查一下其在hdfs上的文件是否正常。
果不其然,观察hadoop的50070页面,会提示hadoop文件系统的具体路径上有两个数据块出错。
(关于hbase在hdfs上的目录相关文章链接:HBase在HDFS上的目录树)
解决方法:
1. 运行hadoop fsck / -files检查hdfs文件
2. 发现/hbase/oldWALs目录下有一个文件损坏,
运行hadoop fsck / -delete清除损坏的文件
3. 运行hbase hbck -details查看hbase概况,发现Table its007-meta有一个region加载失败
4. 运行hbase hbck -fixMeta尝试修复系统元数据表
5. 运行hbase hbck -fix尝试修复region数据不一致问题。
6. 再次运行hbase hbck -details发现问题仍然未修复,那个region仍然加载失败。
故直接将该region下出错的文件移走,暂时移至hdfs根目录
hadoop fs -move /hbase/data/default/its007-meta/fe6463cba743a87e99f9d8577276bada/meta/9a853fdbe13046fca194051cb9f69f9b /
fe6463cba743a87e99f9d8577276bada是region的名字
9a853fdbe13046fca194051cb9f69f9b是region下出错的HFile,有800k大小(注:一个region下可以有多HFile)
7. 运行hbase hbck -fix重新加载之前失败的region,至此完成修复,丢弃了出错的HFile
总结:
hbase在hdfs上一共两个文件损坏。(关于hdfs文件写入相关文章:hdfs文件写入相关概念)
一个是oldWALs下的,这个是存放一些没用的HLog文件的,这里有文件损坏,说明从WALs中转移没用的HLog写到oldWALs下时,写了一半断电导致hdfs上文件数据块出错;
另一个是region下一个HFile文件损坏,这个文件800k比较小,应该是从Memstore flush到HFile时,写了一半没写完导致其在hdfs上的文件数据块出错。
相关文章推荐
- hadoop hbase集群断电数据块被破坏无法启动
- HBase错误日志:集群时钟不同步导致HBase集群无法启动
- MongoDB 副本集分片集群一分片config库主机断电导致该分片config库无法启动
- HBase集群无法读写数据
- 迁移hbase的快照到新集群后RegionServer无法启动,报错failed open of region
- 大数据集群,hbase 更新无法创建表(zookeeper 上有历史数据导致)
- 一次断电导致华为交换机无法启动的杯具
- 断电或强制退出后VMware虚拟机出现The virtual machine appears to be in use无法启动问题解决
- vista bcdedit“无法打开启动配置数据存储,系统找不到指定的文件”错误
- 2010.1--SQL集群 mstdc无法启动问题
- hbase/hypertable集群启动需要进行时间同步原因?
- VS2008无法启动asp.net提示“无法启动程序: http://localhost/.../test.aspx” 数据无效”。
- 00031.Oracle强断电后,oracle无法启动解决方案
- 在SQL Server中修改数据后其提示“在流水模式下,事务无法启动”
- VS2008无法启动asp.net提示“无法启动程序: http://localhost/.../test.aspx” 数据无效”。
- HBase迁移数据方案1(两个集群不能通信)
- greenplum集群发生了某个节点报“could not open relation 1663/16384/32749972: 无此文件或目录”后再无法启动后的一个解决方法-唐成
- vs2008运行WEB程序时提示无法启动程序"http://localhost:12345/index.aspx".有更多数据可用
- Delphi的Lisence被破坏,无法启动!
- VS2008无法启动asp.net提示“无法启动程序: http://localhost/.../test.aspx” 数据无效”。