Hadoop hbase集群断电数据块被破坏无法启动
集群机器意外断电重启,导致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上的文件数据块出错。
hbase region数据块出现问题可以先修复
查看hbasemeta情况
hbase hbck
1.重新修复hbase meta表
hbase hbck -fixMeta
2.重新将hbase meta表分给regionserver
hbase hbck -fixAssignments
如果修复失败,我们可以删除hdfs上的异常数据,删除META表中对应的region信息
Hadoop hbase集群断电数据块被破坏无法启动的更多相关文章
- Hadoop(八)Java程序访问HDFS集群中数据块与查看文件系统
前言 我们知道HDFS集群中,所有的文件都是存放在DN的数据块中的.那我们该怎么去查看数据块的相关属性的呢?这就是我今天分享的内容了 一.HDFS中数据块概述 1.1.HDFS集群中数据块存放位置 我 ...
- Hadoop+HBase 集群搭建
Hadoop+HBase 集群搭建 1. 环境准备 说明:本次集群搭建使用系统版本Centos 7.5 ,软件版本 V3.1.1. 1.1 配置说明 本次集群搭建共三台机器,具体说明下: 主机名 IP ...
- Hadoop跨集群迁移数据(整理版)
1. 什么是DistCp DistCp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具.它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成.它把文件和目录的列表作为map任务的 ...
- 设置Hadoop+Hbase集群pid文件存储位置
有时候,我们对运行几天或者几个月的hadoop或者hbase集群做停止操作,会发现,停止命令不管用了,为什么呢? 因为基于java开发的程序,想要停止程序,必须通过进程pid来确定,而hadoop和h ...
- 大数据平台搭建-hadoop/hbase集群的搭建
版本要求 java 版本:1.8.*(1.8.0_60) 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downl ...
- hadoop 集群中数据块的副本存放策略
HDFS采用一种称为机架感知(rack-aware)的策略来改进数据的可靠性.可用性和网络带宽的利用率.目前实现的副本存放策略只是在这个方向上的第一步.实现这个策略的短期目标是验证它在生产环境下的有效 ...
- Hadoop,HBase集群环境搭建的问题集锦(四)
21.Schema.xml和solrconfig.xml配置文件里參数说明: 參考资料:http://www.hipony.com/post-610.html 22.执行时报错: 23., /comm ...
- Hadoop,HBase集群环境搭建的问题集锦(二)
10.艾玛, Datanode也启动不了了? 找到log: Caused by: java.net.UnknownHostException: Invalid host name: local hos ...
- Spark+Hadoop+Hive集群上数据操作记录
[rc@vq18ptkh01 ~]$ hadoop fs -ls / drwxr-xr-x+ - jc_rc supergroup 0 2016-11-03 11:46 /dt [rc@vq18ptk ...
随机推荐
- linux系统nginx的https的跳转
环境:系统ubuntu16 申请证书是腾讯云免费证书 首先我在安装nginx SSL证书的时候犯了个错误,nginx是需要安装SSl的模块不然没法配置完成.需要安装一个 http_ssl_module ...
- httpd: config error '*.php:/usr/bin/php-cgi' in '/etc/httpd.conf'
/********************************************************************************* * httpd: config e ...
- python调用caffe实现预测
对于已经训练完成的caffemodel,对于单个的图片预测,用python接口来调用是一件非常方便的事情,下面就来讲述如何用python调用已经训练完成的caffemodel,以及prototxt,网 ...
- [LeetCode&Python] Problem 283. Move Zeroes
Given an array nums, write a function to move all 0's to the end of it while maintaining the relativ ...
- HDU 2561
F - 第二第二 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Prac ...
- MySQL 8.0支持DDL原子化
在MySQL 5.5/5.6/5.7版本中,DDL操作是非原子型操作,在执行过程中遇到实例故障重启,可能导致DDL没有完成也没有回滚.如 1.执行DROP TABLE T1,T2操作,实例重启恢复后, ...
- EXtJS Ext.data.Model
(一).首先我们介绍一下Model类中比较常用的几个属性,如果我们想构建一个Model类,最主要的属性就是(Fields)属性,这个属性接受一个数组.用来设置Model中所包含的字段.定义的格式如下: ...
- fork和exec
fork pid_t fork(void); 它在调用进程(成为父进程)中返回一次,返回值为新派生进程(成为子进程)的进程ID号 在子进程中又返回一次,返回值为0.因此,返回值本身告知当前进程是子进程 ...
- 拷贝某个区间(copy,copy_back)
copy 为outputIterator中的元素赋值而不是产生新的元素,所以outputIterator不能是空的 如要元素安插序列,使用insert成员函数或使用copy搭配insert_itera ...
- mysql创建部分索引
mysql中,字符串如何建立索引的(本文中截取一部分) 只对字符串的前几个字符进行索引.通过字符串的前几个字符我们已经能大概排序字符串了,剩下不能排序的可以通过遍历进行查找啊,这样只在B+树中存储字符 ...