Hbase hbck2使用

发布时间 2023-12-29 18:03:44作者: whiteY

1.中止指定的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。

使用方式:

当一个Procedure任务长时间未结束需要手动停止时,可以使用该命令

hbase hbck -j hbase-hbck2-1.2.0-SNAPSHOT.jar bypass -o -r  13118

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

hbase hbck -j hbase-hbck2-1.2.0-SNAPSHOT.jar  assigns 7629868883e9e37c5fdd660903647e0f
scan 'hbase:meta', {ROWPREFIXFILTER => 'log_center:bus_log_table'}
deleteall 'hbase:meta','log_center:bus_log_table,,1662692497742.c8b97ab49c23b0740850edf4ef72606d.'


hbase shell <<< "scan 'hbase:meta', {ROWPREFIXFILTER => 'log_center:bus_log_table,'}"  |grep "info:server" |awk -F " " '{print $1}' > /tmp/hbase_bus_log_table.log

https://blog.csdn.net/weixin_43736084/article/details/127279333