phoinex版本升级回滚导致hbase regionserver启动故障,Failed open of region=XXX

现有hbase1.3集群集成了phoenix 4.14.1版本,在nifi的PutSql执行upsert into  xxx select xxx from xxx时,等待很久之后返回报错,数据写不进,后用命令行sqlline.py执行也是如此:

Error: ERROR 730 (LIM02): MutationState size is bigger than maximum allowed number of bytes (state=LIM02,code=730)

尝试解决,按照网上的方法修改如下参数:

hbase-site.xml

<property>
  <name>phoenix.mutate.batchSize</name>
  <value>15000000</value>
</property>
<property>
  <name>phoenix.mutate.maxSize</name>
  <value>200000</value>
</property>
<property>
  <name>phoenix.mutate.maxSizeBytes</name>
  <value>1048576000</value>
</property>

重试无效,但是在图形界面客户端工具dbeaver和SQuirreL(瘦客户端)下均能很快返回正常。

遂决定升级phoenix4.15.0-hbase1.3,升级很顺利,重启hbase成功。但是发现phoenix4.15.0没有thin-client.jar包,是不是取消了瘦客户端连接,有人知道吗?再次在sqlline.py执行upsert into,显示成功,但是耗时太长,在dbeaver和SQuirreL基本上6秒返回,数据量100万,nifi上还是报错

决定还是退回phoenix4.14.1,将jar包替换成4.14.1,这时hbase regionserver起不来了,报错:

2020-05-28 09:01:22,333 ERROR [RS_OPEN_PRIORITY_REGION-HDP-002:16020-2] handler.OpenRegionHandler: Failed open of region=SYSTEM:TASK,,1590570526285.64d8dd51d95a9de78c4e258ca4bf8631., starting to roll back the global memstore size.
java.io.IOException: Class org.apache.phoenix.coprocessor.TaskRegionObserver cannot be loaded
        at org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.testTableCoprocessorAttrs(RegionCoprocessorHost.java:341)
        at org.apache.hadoop.hbase.regionserver.HRegion.checkClassLoading(HRegion.java:6763)
        at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:6707)
        at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:6669)
        at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:6640)
        at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:6596)
        at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:6547)
        at org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler.openRegion(OpenRegionHandler.java:362)
        at org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler.process(OpenRegionHandler.java:129)
        at org.apache.hadoop.hbase.executor.EventHandler.run(EventHandler.java:129)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

且有好多Failed open of region,原因是 hbase数据和元数据不吻合,下面开始解决:

1、备份hdfs的表数据

hdfs dfs -mv /hbase/data/default  /hbase.default.back
hdfs dfs -mv /hbase/data/ODS_JBYL  /hbase.ODS_JBYL.back
hdfs dfs -mv /hbase/data/SYSTEM  /hbase.SYSTEM.back

2、删除hdfs中的hbase数据目录的全部数据

hdfs dfs -rm -r /hbase

3、恢复hbase表数据

hdfs dfs -mkdir -p /hbase/data/
hdfs dfs -mv /hbase.default.back /hbase/data/default
hdfs dfs -mv /hbase.ODS_JBYL.back /hbase/data/ODS_JBYL
hdfs dfs -mv /hbase.SYSTEM.back /hbase/data/SYSTEM

4、删除zk中的hbaes元数据

zkCli.sh

rmr /hbase

5、删除多余的phoenix表数据

hdfs dfs -rm -r /hbase/data/SYSTEM/CHILD_LINK

hdfs dfs -rm -r /hbase/data/SYSTEM/MUTEX

hdfs dfs -rm -r /hbase/data/SYSTEM/TASK

6、重启hbase

 

此时hbase可以正常启动,下面开始恢复元数据,所有报错的表全部都要按照如下步骤修复:

注意:一定要在所有Region都上线之后再修复,否则修复之后可能出现重复Region
步骤1. hbase hbck 检查输出所以ERROR信息,每个ERROR都会说明错误信息,类似如下:

ERROR: Found inconsistency in table SYSTEM:TASK
ERROR: There is a hole in the region chain between  and .  You need to create a new .regioninfo and region dir in hdfs to plug the hole.

步骤2. hbase hbck -fixTableOrphans 先修复tableinfo缺失问题,根据内存cache或者hdfs table 目录结构,重新生成tableinfo文件。

步骤3. hbase hbck -fixHdfsOrphans 修复regioninfo缺失问题,根据region目录下的hfile重新生成regioninfo文件

步骤4. hbase hbck -fixHdfsOverlaps 修复region重叠问题,merge重叠的region为一个region目录,并从新生成一个regioninfo

步骤5. hbase hbck -fixHdfsHoles 修复region缺失,利用缺失的rowkey范围边界,生成新的region目录以及regioninfo填补这个空洞。

步骤6. hbase hbck -fixMeta 修复meta表信息,利用regioninfo信息,重新生成对应meta row填写到meta表中,并为其填写默认的分配regionserver

步骤7. hbase hbck -fixAssignments 把这些offline的region触发上线,当region开始重新open 上线的时候,会被重新分配到真实的RegionServer上 , 并更新meta表上对应的行信息。

一切完成后可以查询测试一下。

在phoenix里删除多余的元数据表信息:

delete from system.catalog where table_name = 'CHILD_LINK';

delete from system.catalog where table_name = 'MUTEX';

delete from system.catalog where table_name = 'TASK';

 

最后再看phoenix4.15.0和phoenix4.14.1还是有很大区别的,回退版本时可能会导致一系列问题。

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hblicy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值