参数说明:
设置表状态,表状态包含:ENABLED, DISABLED, DISABLING, ENABLING
使用场景:
例如:disable一个表失败,部分region除以RIT并且表的状态DISABLING。
修复方法:
bypass掉该表以及region相关的Procedure任务,然后使用setTableState将表的状态置为DISABLED。为了保证region的状态一致,建议重新enable该表后再disalbe一次。
使用方式:
hbase hbck -j /opt/hbase-hbck2-1.1.0.jar setTableState tableName state
setRegionState
参数说明:
该参数用于强制把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 /opt/ hbase-hbck2-1.1.0.jar setRegionState regionName STATES
extraRegionsInMeta NAMESPACE|NAMESPACE:TABLENAME>...
参数说明:
找到额外的region,比如region在meta表,实际并没有目录,与reportMissingRegionsInMeta相反
参数解析:
-f 修复元数据并移除找到的所有的额外region
使用方式:
hbase hbck -j /opt/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 ...
参数说明:
检查HDFS和meta表中的region信息,并列出meta表中确实的region信息。需要注意:如果meta表中没有表的state信息,该检查不会对该表进行检查;默认检查所有的表,可以指定一个或者多个namespace或者表,如果是default命名空间下的表,也需要指定命名空间。
使用方式:
hbase hbck -j /opt/hbase-hbck2-1.1.0.jar reportMissingRegionsInMeta namespace1|default:t2
filesystem [OPTIONS] [...]
参数说明:
命令主要修复与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 /opt/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 /opt/hbase-hbck2-1.1.0.jar fixMeta
generateMissingTableDescriptorFile
参数说明:
修复表tableinfo,类似hbck1的fixTableOrphan.如果表目录直接丢失,则不能正常修复。
修复过程中会先检查TableDescriptor是否缓存在hmaster中,如果是,则直接通过缓存生成,如果不在,则通过表名、列族(表目录确定)、默认配置和列族描述符。
使用方式:
hbase hbck -j /opt/hbase-hbck2-1.1.0.jar generateMissingTableDescriptorFile tableName
scheduleRecoveries ...
参数说明:
创建一个SCP用来处理指定的ServerName。正常情况下,meta表中记录的region所在的ServerName应该是在线的RegionServer,但是记录的ServerName已经不存在,会导致region一致性的问题,需要通过此命令创建一个SCP来进行恢复。
使用方式:
hbase hbck -j /opt/ hbase-hbck2-1.1.0.jar replication -scheduleRecoveries sn1 sn2
二、修复Region重叠
1.执行修复命令,检查修复重叠region。
hbase hbck -j /opt/client/HBase/hbase/tools/hbase-hbck2-*.jar filesystem -fixHdfsOverlaps 表名
---->重叠region被合并,旧region被下线,状态置为offline,清空hdfs上旧region目录
2.执行meta表清理命令,清除掉已经被下线的region。
hbase hbck -j /opt/client/HBase/hbase/tools/hbase-hbck2-*.jar extraRegionsInMeta -f namespace名:表名
--->meta表修复,避免重新上线重叠region
3.重启主HMaster,查看原生界面region状态,如果前面的命令执行过程中有发现存在Hfile损坏的情况,执行下面的命令修复:
hbase hbck -j /opt/client/HBase/hbase/tools/hbase-hbck2-*.jar filesystem -fix 表名
注意:如果同时存在region重叠以及split问题时,且需要需要强制移除父region时,执行以下命令:
hbase hbck -j /opt/client/HBase/hbase/tools/hbase-hbck2-*.jar filesystem -fixHdfsOverlaps -removeParents
三、修复 region空洞
1.执行修复命令,检查修复空洞region。
hbase hbck -j /opt/client/HBase/hbase/tools/hbase-hbck2-*.jar filesystem -fixHdfsHoles
--->生成新的rgion目录
2.把生成的region添加到meta表中:
hbase hbck -j /opt/client/HBase/hbase/tools/hbase-hbck2-*.jar addFsRegionsMissingInMeta namespace名:表名
3.检查新的region目录信息是否完整,查看是否存在regioninfo和列族等信息
hdfs dfs -ls /hbase/data/dafault/表名/region名
如果没有,需要执行命令重新生成-fixHdfsOrphans
hbase hbck -j /opt/client/HBase/hbase/tools/hbase-hbck2-*.jar filesystem
4.上线region,执行
hbase hbck -j /opt/client/HBase/hbase/tools/hbase-hbck2-*.jar assigns region名1 region名2
注意:操作过程中,从web ui上看到的region信息并非最新,需要根据meta表来确定,更新信息需要HM重新初始化。
四、 数据加载
修复后,需要查看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的文件个数,根据需要可进行调整。
五、、离线修复meta表命令
hbase_hbck2_path=$(find /opt/client -name hbase-hbck2-*.jar)
export HBASE_CLASSPATH="${hbase_hbck2_path}"
hbase org.apache.hbase.hbck1.OfflineMetaRepair
五、修复region closing或者opening状态
1、移除/hbase/MasterProWAL
2、主备倒换HMaster
六、数据迁移修复
hbase 1.x直接使用repair
hbase2.x:
开源:未找到有效方式
华为MRS:
1、 停止hbase服务
2、 客户端source环境变量后认证
3、 客户端执行命令:
export HBASE_CLASSPATH="${HBASE_CLASSPATH}:/opt/hadoopclient/HBase/hbase/tools/hbase-hbck2-2.2.3-hw-ei-302022.jar";
hbase org.apache.hbase.hbck1.OfflineMetaRepair
4、 启动hbase服务
EI企业智能 FusionInsight HBase MapReduce MapReduce服务
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。