HBCK2 详解

news/2024/11/8 18:32:22/

一. hbck2使用

hbase hbck -help:hbck帮助,执行后反馈输出hbck的帮助文档。没太多有效信息,主要就是说hbase2.x里面不再支持hbck1。

使用hbase hbck -j hbase-hbck2-1.1.0.jar --help 输出帮助信息。

bypass [OPTIONS] <PID.>…

参数说明:

中止指定的Procedure任务。

当一个Procedure任务长时间未结束需要手动停止时,可以使用该命令。执行该操作可能会导致该任务对应的表,region的状态不一致,需要手动修复。如果命令执行成功则返回true,否则返回false。

在Procedure的类里有一个bypass的flag, 每次执行时会检查这个flag是否为true,如果为true则直接返回null, 这样procedure就会被认为执行成功。而bypass就是把这个procedure对象中的这个flag直接设为true。 这样stuck的procedure就不再执行,也不会继续卡在哪里,释放了锁后,那么后面才能进行修复工作。
返回值为true则是成功,false是失败。

参数解析:

-o,–overide Procedure任务执行时会获取一个IdLock,避免一个任务被多个线程处理。bypass任务时,如果不指定该参数,并且该任务还在运行中,则会导致bypass失败。指定该参数,会强制将任务的bypass标识设置为true。

需要注意: 如果bypass的Procedure没有父Procedure,也没有子Procedure,则可以直接bypass;如果有父Procedure,则当前Procedure的状态不能为RUNNABLE, WAITTING,WAITTING_TIMEOUT,否则会bypass失败;如果有子Procedure,则参考下面一个参数的说明。

-r, --recursive 如果指定的Procedure还存在subProcedure,则需要指定该参数,然后会把该任务下所有子任务都先bypass掉,否则指定的Procedure会bypass失败。

-w, --lockWait -o参数中提到的获取IdLock的超时时间,如果没有指定-o的话,会等待获取IdLock直到超过该超时长。默认1ms。

使用方式:

hbase hbck -j hbase-hbck2-1.1.0.jar bypass [OPTIONS] pid

pid获取:

在 Master UI 主页的 Procedures & Locks 菜单栏下,在页面标题中列出了所有正在进行的 Procedure 和 Locks,以及当前的 Master Procedure WALs

Procedure 和 Locks 的列表也可以通过 hbase shell 获得: list_procedures

assigns [OPTIONS] <ENCODED_REGIONNAME>

参数说明:

将一个或多个 region 再次随机 assign 到别的机器上,返回值是创建的 pid 则为成功,-1 则为失败

参数解析:

-o, 指定是否强制覆盖当前的Procedure,不指定的话,会对region的状态进行检查,如果该region有关联的Procedure任务或者region的状态不是CLOSED或OFFLINE,该操作会执行失败;

-i, 如果一次需要操作多个region,除了在命令后面指定多个encodedregionname(空格分开),还可以通过该参数指定一个或多个本地文件,文件内容为encoded regionname(一行一个region)。

使用方式:

hbase hbck -j hbase-hbck2-1.1.0.jar assigns encodedRegionName1 encodedRegionName2 ...hbase hbck -j hbase-hbck2-1.1.0.jar assigns -i fileName1 fileName2 ...

unassigns <ENCODED_REGIONNAME>…

参数说明:

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

参数解析:

-o,如果不指定该参数,创建TRSP之前,会检查region的状态,需要同时满足三个条件:region状态为OPEN,该表的状态非DISABLED或DISABLING, 该region没有关联的Procedure,否则会执行失败。如果该region已有对应的TRSP,新提交的TRSP任务会等待。创建成功则返回新建TRSP的pid,否则返回-1。该命令只能处理处于OPEN, CLOSING, MERGING, SPLITING状态的region。

使用方式:

hbase hbck -j hbase-hbck2-1.1.0.jar unassigns encodedRegionName1 encodedRegionName2...

setTableState <TABLE.> <STATE.>

参数说明:

设置表状态,表状态包含:ENABLED, DISABLED, DISABLING, ENABLING

使用场景:

例如:disable一个表失败,部分region处于RIT状态,并且表的状态DISABLING。

修复方法:

bypass掉该表以及region相关的Procedure任务,然后使用setTableState将表的状态置为DISABLED。为了保证region的状态一致,建议重新enable该表后再disalbe一次。

使用方式:

hbase hbck -j hbase-hbck2-1.1.0.jar setTableState tableName state

setRegionState <ENCODED_REGIONNAME> <STATE.>

参数说明:

该参数用于强制把meta表中的region状态修改为指定的状态。该参数一般需要配合assigns/unassigns命令使用。因为执行assigns/unassigns命令需要region处于特定的状态,当region状态出现不一致,需要手动干预时,可能需要使用该命令强制将region修改为特定的状态。

状态包含:OFFLINE, OPENING, OPEN, CLOSING, CLOSED, SPLITTING, SPLIT,FAILED_OPEN, FAILED_CLOSE, ERGING, MERGED,SPLITTING_NEW, MERGING_NEW, ABNORMALLY_CLOSED

使用方式:

hbase hbck -j hbase-hbck2-1.1.0.jar setRegionState regionName STATES

extraRegionsInMeta NAMESPACE|NAMESPACE:TABLENAME>…

参数说明:

找到额外的region,比如region在meta表,实际并没有HDFS目录,与reportMissingRegionsInMeta相反

参数解析:

-f 修复元数据并移除找到的所有的额外region

使用方式:

hbase hbck -j hbase-hbck2-1.1.0.jar extraRegionsInMeta namespace|namespace:tableName

使用场景:

类似hbase1中的found in META, but not in HDFS or deployed on any region server.

reportMissingRegionsInMeta <NAMESPACE|NAMESPACE:TABLENAME>…

参数说明:

检查HDFS和meta表中的region信息,并列出meta表中确实的region信息。
需要注意:如果meta表中没有表的state信息,该检查不会对该表进行检查;默认检查所有的表,可以指定一个或者多个namespace或者表,如果是default命名空间下的表,也需要指定命名空间。

使用方式:

hbase hbck -j hbase-hbck2-1.1.0.jar reportMissingRegionsInMeta namespace1|default:test

filesystem [OPTIONS] [<TABLENAME.>…]

参数说明:

命令主要修复与hdfs相关。主要用于修复/hbase目录下的不一致问题,开源版本仅提供了修复损坏的HFile文件,错误的reference,HFileLink文件以及hbase.version文件问题;

华为MRS集群,增加了hbase1中的一些修复,比如:region目录的空洞,重叠,残留的splitregion目录等问题。

参数解析:

开源:
-f,–fix使用此选项可对损坏的HFile,错误链接和引用进行旁注。不修复hdfs holes、regioninfo缺失等问题。

华为:
-sidelineCorruptHFiles:检查指定的表(默认全部)是否存在损坏的HFile文件并修复;

-fixReferenceFiles:用于检查指定的表(默认全部)是否存在损坏的HFile文件并修复;

-fixReferenceFiles:用于检查指定的表(默认全部)是否存在损坏的HFile文件并修复;

-fixVersionFile:用于检查指定的表(默认全部)是否存在损坏的HFile文件并修复;该操作不再要求HBase服务可用;

-fix:作用等同于同时指定上面4个参数,该参数为HBCK2开源版本提供的参数,其余参数为MRS特有;

-fixHdfsOrphans: 用于检查修复缺失.regioninfo文件的问题。如果该region目录下没有列簇目录或者,无法修复。修复时先从meta表获取该region的数据并重新生成.regioninfo文件,否则从该region下的hfile解析出startkey和endkey并生成.regioninfo文件。如果没有hfile,则删除该region目录,然后需要通过-fixHdfsHoles修复region空洞;

-fixHdfsHoles:用于检查和修复region空洞;

-fixHdfsOverlaps:用于检查和修复region重叠;

-removeParents:如果parent和daughter region同时在线,强制下线parent;

-fixSplitParents:如果parent和daugh region部分或者都不在线,需要通过该参数进行修复。如果daughter region的信息没有更新到meta表,则重新将parent region上线,否则尝试将daughter region上线并清理parent region。如果此时Split region的Procedure任务还未结束,默认不执行修复操作。如果Split Procedure任务执行超过一定时间(默认60s),可以使用-force强制中止该问题。用户还可以使用-timeout修改默认的时间,单位为ms;

-fixTableOrphans:用于检查修复缺少.tableinfo文件的问题,默认从HMaster的缓存中获取并重新生成.tableinfo文件,如果获取失败,则使用默认的参数生成.tableinfo文件,这样会导致用户设置的参数丢失;

使用方式:

hbase hbck -j hbase-hbck2-1.1.0.jar filesystem OPTIONS tableName

fixMeta

参数说明:

2.2.1/2.1.6及其以后版本才存在的参数,用户修复meta表中存在的region空洞和重叠问题。该操作依赖CatalogJanitor Consistency Issues Report,主要是针对该report中的问题进行修复操作。如果meta表和HDFS目录同时出现空洞,应该先对meta表进行修复;

使用方式:

hbase hbck -j hbase-hbck2-1.1.0.jar fixMeta

generateMissingTableDescriptorFile <TABLENAME.>

参数说明:

修复表tableinfo,类似hbck1的fixTableOrphan.如果表目录直接丢失,则不能正常修复。

修复过程中会先检查TableDescriptor是否缓存在hmaster中,如果是,则直接通过缓存生成,如果不在,则通过表名、列族(表目录确定)、默认配置和列族描述符。

使用方式:

hbase hbck -j hbase-hbck2-1.1.0.jar generateMissingTableDescriptorFile tableName

scheduleRecoveries <SERVERNAME.>…

参数说明:

创建一个SCP用来处理指定的ServerName。正常情况下,meta表中记录的region所在的ServerName应该是在线的RegionServer,但是记录的ServerName已经不存在,会导致region一致性的问题,需要通过此命令创建一个SCP来进行恢复。

使用方式:

hbase hbck -j hbase-hbck2-1.1.0.jar replication -scheduleRecoveries sn1 sn2

二. region修复

1. 修复Region重叠

  1. 执行修复命令,检查修复重叠region。
    hbase hbck -j hbase-hbck2*.jar filesystem -fixHdfsOverlaps 表名
    ----> 重叠region被合并,旧region被下线,状态置为offline,清空hdfs上旧region目录

  2. 执行meta表清理命令,清除掉已经被下线的region。
    hbase hbck -j hbase-hbck2*.jar extraRegionsInMeta -f namespace名:表名
    —> meta表修复,避免重新上线重叠region

  3. 重启主HMaster,查看原生界面region状态,如果前面的命令执行过程中有发现存在Hfile损坏的情况,执行下面的命令修复:
    hbase hbck -j hbase-hbck2*.jar filesystem -fix 表名
    注意:如果同时存在region重叠以及split问题时,且需要需要强制移除父region时,执行以下命令:
    hbase hbck -j hbase-hbck2*.jar filesystem -fixHdfsOverlaps -removeParents

2. 修复 region空洞

  1. 执行修复命令,检查修复空洞region。
    hbase hbck -j hbase-hbck2*.jar filesystem -fixHdfsHoles
    —> 生成新的rgion目录
  2. 把生成的region添加到meta表中:
    hbase hbck -j hbase-hbck2*.jar addFsRegionsMissingInMeta namespace名:表名
  3. 检查新的region目录信息是否完整,查看是否存在regioninfo和列族等信息
    hdfs dfs -ls /hbase/data/dafault/表名/region名
    如果没有,需要执行命令重新生成-fixHdfsOrphans
    hbase hbck -j hbase-hbck2*.jar filesystem
  4. 上线region,执行
    hbase hbck -j hbase-hbck2*.jar assigns region名1 region名2
    注意:操作过程中,从web ui上看到的region信息并非最新,需要根据meta表来确定,更新信息需要HM重新初始化。

3. 数据加载

修复后,需要查看HDFS上 hbase/.hbck目录下是否存在文件,以及文件内容,如果存在非refer文件,则需要重新Load到HBase中。
移动修复目录下的内容到新的目录

hdfs dfs -mkdir /tmp/表名
hdfs dfs -mkdir /tmp/表名/列族名
hdfs dfs -mv /hbase/.hbck/....../表名/*/列族名 /tmp/表名/列族名

执行load命令
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles -Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=3000 /tmp/表名 表名

注意:-Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily表示每个region最多load的文件个数,根据需要可进行调整。

4. 修复region closing或者opening状态

1、移除/hbase/MasterProWAL

2、主备倒换HMaster

作为记录使用,来源华为云社区

https://bbs.huaweicloud.com/blogs/353333


http://www.ppmy.cn/news/703832.html

相关文章

[ 电子]STM32驱动28BYJ-48步进电机实现外网控制

新人博主Github>https://github.com/MartinxMax 这个项目能做什么?用到了哪些编程语言&#xff1f;需要什么硬件?硬件接线配置SIM900ASTM32 C语言代码服务器 Python流量转发代码控制端 Python代码效果演示 这个项目能做什么? 解除局域网内限制&#xff0c;实现任意地方远…

hbck

Apache HBase HBCK2 Tool HBCK2是hbase-1.x修复工具&#xff08; 也称作hbck1&#xff09;的继承者。 使用它代替hbck1进行hbase-2.x安装修复。 hbck1 不应该对hbase-2.x群集运行hbase-1.x附带的hbck工具&#xff08; hbck1&#xff09;。 它可能会造成损坏。 虽然hbck1仍然…

Windows驱动 HCK测试方法及数字签名使用方法介绍

一、 HCK安装及使用方法介绍 1. 安装环境要求 操作系统&#xff1a; Windows Server2008 R2英文版 需要两台电脑&#xff0c;一台做测试服务器&#xff0c;另一台做测试机 网络要求&#xff1a;两台电脑必须都能连接internet&#xff0c;并同属一个局域网 地区语言&#xf…

WHQL认证环境部署以及测试攻略二之HLK或者HCK软件的安装

WHQL认证目前所使用的测试软件有WLK1.6&#xff0c;HCK2.1&#xff0c;HLK。 WLK1.6主要是针对Windows Server 2003&#xff0c;已经不是主流测试了&#xff0c;基本属于弃用状态。HCK2.1主要是针对Win7 SP1 Windwos 8 以及Windows8.1 这3个测试系统的测试。目前市场上还是有…

[代码实践]利用LSTM构建基于conll2003数据集的命名实体实体识别NER模型

1. conll2003数据集介绍以及数据集预处理请看下面博客 conll2003数据集下载与预处理_茫茫人海一粒沙的博客-CSDN博客 2. 取预处理过的数据集 import tensorflow as tf from keras.models import Model from keras.layers import Input, Embedding, LSTM, Dense, TimeDistrib…

计算机桌面保护时间,电脑处于屏幕保护或者休眠状态的时间怎么自己设置?

1.打开笔记本2113电脑&#xff0c;点击打开开始菜单-----选择控制面板或者5261打开我的电脑&#xff0c;4102选择点击控制1653面板2.进入到控制面板页面&#xff0c;我们点击选择——硬件和声音 并且点击进入硬件和声音3.点击进入硬件和声音后&#xff0c;你会看到下面的页面—…

Win10电脑每2分钟频繁锁屏,设置锁屏时间也无效解决办法

我的win10系统的电脑不管你锁屏时间设置为多少&#xff0c;两分钟自动就会进入休眠&#xff0c;一遍一遍的解锁真的很麻烦&#xff0c;费时费力。在网上查了好久&#xff0c;终于找到了解决方法&#xff0c;问题的根源是在Windows电源选项的一个隐藏设置项“无人参与系统睡眠超…