集群机器意外断电重启,导致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集群断电数据块被破坏无法启动的更多相关文章

  1. Hadoop(八)Java程序访问HDFS集群中数据块与查看文件系统

    前言 我们知道HDFS集群中,所有的文件都是存放在DN的数据块中的.那我们该怎么去查看数据块的相关属性的呢?这就是我今天分享的内容了 一.HDFS中数据块概述 1.1.HDFS集群中数据块存放位置 我 ...

  2. Hadoop+HBase 集群搭建

    Hadoop+HBase 集群搭建 1. 环境准备 说明:本次集群搭建使用系统版本Centos 7.5 ,软件版本 V3.1.1. 1.1 配置说明 本次集群搭建共三台机器,具体说明下: 主机名 IP ...

  3. Hadoop跨集群迁移数据(整理版)

    1. 什么是DistCp DistCp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具.它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成.它把文件和目录的列表作为map任务的 ...

  4. 设置Hadoop+Hbase集群pid文件存储位置

    有时候,我们对运行几天或者几个月的hadoop或者hbase集群做停止操作,会发现,停止命令不管用了,为什么呢? 因为基于java开发的程序,想要停止程序,必须通过进程pid来确定,而hadoop和h ...

  5. 大数据平台搭建-hadoop/hbase集群的搭建

    版本要求 java 版本:1.8.*(1.8.0_60) 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downl ...

  6. hadoop 集群中数据块的副本存放策略

    HDFS采用一种称为机架感知(rack-aware)的策略来改进数据的可靠性.可用性和网络带宽的利用率.目前实现的副本存放策略只是在这个方向上的第一步.实现这个策略的短期目标是验证它在生产环境下的有效 ...

  7. Hadoop,HBase集群环境搭建的问题集锦(四)

    21.Schema.xml和solrconfig.xml配置文件里參数说明: 參考资料:http://www.hipony.com/post-610.html 22.执行时报错: 23., /comm ...

  8. Hadoop,HBase集群环境搭建的问题集锦(二)

    10.艾玛, Datanode也启动不了了? 找到log: Caused by: java.net.UnknownHostException: Invalid host name: local hos ...

  9. Spark+Hadoop+Hive集群上数据操作记录

    [rc@vq18ptkh01 ~]$ hadoop fs -ls / drwxr-xr-x+ - jc_rc supergroup 0 2016-11-03 11:46 /dt [rc@vq18ptk ...

随机推荐

  1. 标准I/O读写文件

    一.函数原型 1.FILE *fopen(const char *path, const char *mode); path:要打开文件路径及文件名: mode:  r 打开只读文件,该文件必须存在. ...

  2. redis的哨兵模式

    我是在一台服务器上安装了三个redis  一主两从 想安装gcc gcc-c++ make tcl  lrzsz yum -y install gcc gcc-c++ make tcl  lrzsz ...

  3. 【论文 PPT】 【转】Human-level control through deep reinforcement learning(DQN)

    最近在学习强化学习的东西,在网上发现了一个关于DQN讲解的PPT,感觉很是不错,这里做下记录,具体出处不详. ============================================= ...

  4. Python之路PythonNet,第二篇,网络2

    pythonnet   网络2 问题: 什么是七层模型tcp 和udp区别三次握手和四次挥手************************************************** tcp ...

  5. 使用kcptun安全代理访问服务

    KCP 是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果. KCP:https://github.com/skywind ...

  6. 给电脑换源 npm 国内镜像 cnpm

    (1)通过 config 配置指向国内镜像源 npm config set registry http://registry.cnpmjs.org //配置指向源 npm info express   ...

  7. 软工实践——结对作业2【wordCount进阶需求】

    附录: 队友的博客链接 本次作业的博客链接 同名仓库项目地址 一.具体分工 我负责撰写爬虫爬取信息以及代码整合测试,队友子恒负责写词组词频统计功能的代码. 二.PSP表格 PSP2.1 Persona ...

  8. 07 Object类,Scanner,Arrays类,String类,StringBuffer类,包装类

    Object类的概述:* A:Object类概述    * 类层次结构的根类    * 所有类都直接或者间接的继承自该类* B:构造方法    * public Object()    * 子类的构造 ...

  9. (13)自定意义标签和过滤器 (templatetags)

    过滤器分内置和自定意义 PS:过滤器可以用在for循环和if判断后,但是标签不能使用在for循环和if判断后 内置过滤器: add(在模板中实现加减法) default(就是当传入的变量是False的 ...

  10. centos6.8 搭建zabbix被监控端

    System:Centos 6.8 Zabbix-agent:3.2.1 1 安装对应版本的zabbix的yum源,官方网站中没有找到zabbix3.0支持的centos6的源,所以用的3.2 #rp ...