zoukankan      html  css  js  c++  java
  • 一次snapshot迁移引发的Hbase RIT(hbase2.1.0-cdh6.3.0)

    1. 问题起因

    通过snapshot做跨集群数据同步时,在执行拷贝脚本里没有指定所有者及所有组,导致clone时没有权限,客户端卡死。master一直报错,经过一系列操作后,导致RIT异常。

    2. 异常记录

    • 不指定所有者,默认权限是hdfs:hbase,会导致异常

    • 执行clone_snapshot <snapshot_name>,<table_name>时,master异常信息

    • 经过一系列操作后(重启、删除hdfs相关目录)出现了RIT:

     

      

    3. 解决过程

    因之前使用hbase1.2.6版本可以通过hbck做修复,但habse2.0之后,大多hbck命令已经无法使用

     

    • 于是尝试其他操作:

    1)通过删除hdfs相关目录及zk下hbase目录等操作无效

    2)删除hbase:meta表中相关表记录无效

    3)删除zk下hbase目录,重启无效

    4. 最终通过hbck2解决

    由于HBCK2已经被剥离出HBase成为了一个单独的项目,如果你想要使用这个工具,需要根据自己HBase的版本,编译源码。

    GitHub地址为:https://github.com/apache/hbase-operator-tools.git

    1)下载后在项目根目录下编译:mvn clean install -DskipTests(普通方式编译会报错)

    现在使用的版本是hbase2.1.0版本,不支持编译hbck2,所以使用的默认hbase2.1.6编译完成,在hase-hbck2的target目录下可以找到我们最后需要的jar

     

    • 使用方法:

    hbase hbck -j ./hbase-hbck2-1.1.0-SNAPSHOT.jar <命令>

    2)使用assigns方法解决 RIT

    hbase hbck -j ./hbase-hbck2-1.1.0-SNAPSHOT.jar unassigns <regionname>

    将一个或多个region unassign,返回值是创建的pid则为成功,-1则为失败。

    在hbase页面找到rit相关的regionname

    • 执行命令,如图返回进程号为1819

    • master日志:

    • 可以看到rit数减少了一个

    • 重复以上操作,rit解决!

    3)在hbase界面上找到Procedure相关进程id释放

    hbase hbck -j ./hbase-hbck2-1.1.0-SNAPSHOT.jar bypass <Procedure id>

    当rit显示后,hbase依然不正常,hbaseshell无法操作,使用hbase hbck检查显示 Master is initializing

     

    • 执行后返回true代表成功,页面会显示RUNNABLE(Bypass)

      

    • 可以看到当前procedure还有很多子进程

    • 经过大约一小时之后,进程才结束

    • 此时页面也显示完成

    • 随后消失

    • 此时,检查hbase,hbase hbck,显示OK,解决过程到此结束!

  • 相关阅读:
    pair
    非整除集合
    集合 set
    实现字通配符*
    vector
    矩阵及其初等变换
    求数组中连续子数组(最少有一个元素)的最大和。
    最长上升序列(Lis)
    st表求区间最大值
    [Noip2015] 信息传递
  • 原文地址:https://www.cnblogs.com/changsblogs/p/13938680.html
Copyright © 2011-2022 走看看