HBase之HBCK2

HBCK2

  • hbck2的使用方法
    • reportMissingRegionsInMeta
    • addFsRegionsMissingInMeta
    • assigns
    • unassigns
    • extraRegionsInMeta
    • filesystem
    • fixMeta
    • setRegionState
    • setTableState
    • bypass
    • generateMissingTableDescriptorFile
    • regionInfoMismatch
    • replication
    • scheduleRecoveries
    • recoverUnknown
  • 发现问题
    • master logs
    • Master UI
    • 其他方式

  • 对于hbase 2.x版本的集群,hbck1已不再适用。
  • hbck2是为hbase 2.x版本专用修复工具,同时相对于hbck1,hbck2的修复并不是通过本地上下文而是通过master执行修复。
  • 获取地址和使用

hbck2的使用方法

 $  ${HBASE_HOME}/bin/hbase --config /etc/hbase-conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.0.0-SNAPSHOT.jar
 
usage: HBCK2 [OPTIONS] COMMAND <ARGS>
Options:
 -d,--debug                                       run with debug output
 -h,--help                                        output this help message
 -p,--hbase.zookeeper.property.clientPort <arg>   port of hbase ensemble
 -q,--hbase.zookeeper.quorum <arg>                hbase ensemble
 -s,--skip                                        skip hbase version check
                                                  (PleaseHoldException)
 -v,--version                                     this hbck2 version
 -z,--zookeeper.znode.parent <arg>                parent znode of hbase ensemble                                                

reportMissingRegionsInMeta

  • 用于报告在hbase:meta表缺失但是hdfs目录仍然存在的region
  • 需要hbase:meta在线,会对传入的每张表进行比对检查。如果没有缺失会打印no missing regions信息,如果有缺失会打印相关的表名。
  • -i可以指定文件批量检查,将需要检查的表按行写入

使用方法

 reportMissingRegionsInMeta [<NAMESPACE|NAMESPACE:TABLENAME>...|
      -i <INPUT_FILE>...]
   Options:
    -i,--inputFiles  take one or more files of namespace or table names
  1. HBCK2 reportMissingRegionsInMeta default:table_1 default:table_2
  2. HBCK2 reportMissingRegionsInMeta default:table_1 ns1
  3. HBCK2 reportMissingRegionsInMeta -i fileName1 fileName2

addFsRegionsMissingInMeta

  • 当region不在hbase:meta表中,但是region目录还存在HDFS上时,可以使用addFsRegionsMissingInMeta修复。
  • 对于参数传入的表,会将其在hbase:meta表中存在的region和region目录进行一一对比,如果没有匹配上的,会通过读取region目录下的regioninfo元数据文件再次将region创建在hbase:meta表中。
  • 再次创建时region会是CLOSED状态,此时region并不在Master的缓存中所以不会上线region。需要使用HBCK2 ‘assign’ 命令来将region上线。
  • 该命令返回的是对于所有有缺失的region重新assign的HBCK2 assigns命令
  • 注意:如果hbase版本小于2.3,那么要使用assign之前需要滚动重启HMaster。

使用方法

addFsRegionsMissingInMeta [OPTIONS] [<NAMESPACE|NAMESPACE:TABLENAME>...|-i <INPUTFILES>...]
   Options:
    -i,--inputFiles  take one or more files of namespace or table names
    -o,--outputFile  name/prefix of the file(s) to dump region names
    -n,--numLines  number of lines to be written to each output file
  1. HBCK2 addFsRegionsMissingInMeta default:tbl_1 n1:tbl_2 n2

  2. HBCK2 addFsRegionsMissingInMeta -i fileName1 fileName2

  3. 如果指定-o选项,则该输出文件可以在后续assign命令的-i选项中直接当传入参数使用

assigns

  • 用于分配region。该命令可以在Master初始化时使用(如果指定-skip)。
  • 返回创建AssignProcedure的pid或者-1

使用方法

 assigns [OPTIONS] [<ENCODED_REGIONNAME>...|-i <INPUT_FILE>...]
   Options:
    -o,--override  override ownership by another procedure
    -i,--inputFiles  take one or more files of encoded region names
    -b,--batchSize   number of regions to process in a batch
  1. HBCK2 assigns 1588230740 de00010733901a05f5a2a3a382e27dd4
  2. HBCK2 assigns -i fileName1 fileName2
    如果指定-i或–inputFiles,可以传入一个文件。该文件包含region的编码名,一行一个。
  3. HBCK2 assigns -i fileName1 fileName2 -b 500
    -b可以控制分配的批次数量

unassigns

  • 用于下线region,可以在master初始化时使用(需指定-skip)。
  • 返回创建UnassignProcedure的pid或者-1
  • 可以指定region的编码名,也可以使用硬编码名

使用方法

unassigns [OPTIONS] [<ENCODED_REGIONNAME>...|-i <INPUT_FILE>...]
   Options:
    -o,--override  override ownership by another procedure
    -i,--inputFiles  take one or more input files of encoded region names
    -b,--batchSize   number of regions to process in a batch
  1. HBCK2 unassigns 1588230740 de00010733901a05f5a2a3a382e27dd4
  2. HBCK2 unassigns -i fileName1 fileName2
  3. HBCK2 unassigns -i fileName1 fileName2 -b 500

extraRegionsInMeta

  • 用于报告存在hbase:meta表中的但是没有相关目录的region。
  • 需要hbase:meta在线。对于传入的每个表,都将hbase:meta表中的region和HDFS上的目录进行比对。
  • 如果指定了–fix选项,则多余的region将会从元数据中删除。使用–fix之前,需要先执行报告查看是否存在region overlap的现象,如果有可以执行–fix。

使用方法

extraRegionsInMeta [<NAMESPACE|NAMESPACE:TABLENAME>...|
      -i <INPUT_FILE>...]
   Options:
    -f, --fix    fix meta by removing all extra regions found.
    -i,--inputFiles  take one or more input files of namespace or
   table names
  1. HBCK2 extraRegionsInMeta default:table_1 default:table_2 ns1
    对default ns下的table_1和table_2、以及ns1下的所有表触发报告
  2. HBCK2 extraRegionsInMeta -i fileName1 fileName2

filesystem

  • 该命令仅仅与文件系统交互,可以报告损坏的hfiles、references、links,hbase.version缺失和完整性问题。
  • 默认会检查所有表,并且如果hbase.version缺失会重建
  • 使用–fix可以移走损坏的文件和链接,但无法修复region holes(空洞)和orphan(孤立)。

使用方法

 filesystem [OPTIONS] [<TABLENAME>...|-i <INPUT_FILE>...]
   Options:
    -f, --fix    sideline corrupt hfiles, bad links, and references.
    -i,--inputFiles  take one or more input files of table names
  1. HBCK2 filesystem -i fileName1 fileName2
  2. HBCK2 filesystem test

fixMeta

  • 存在于2.2.1/2.1.6或更新的版本,在做任何修复时,需要保证hbase:meta是正常的
  • 对于hbase:meta表中损坏或状态不一致region做服务端的修复。主要是修复region空洞和重叠等问题,会在hdfs上创建匹配的空目录。
  • 无参数,直接使用

setRegionState

  • 设置region状态。修改成功则返回0,失败则返回1。

  • 典型场景:因为region在hbase:meta表中状态不一致,导致无法unassigns或者assigns。但比如 region只有在SPLITTING|SPLIT|MERGING|OPEN|CLOSING状态才可以unassigns。

  • 注意:
    1.该操作为高危操作,作为最后手段使用。
    2.在执行命令之前,确保regon没有其他正在运行的procedure,如assign、split等。可以通过list_procedure命令查看。

  • region的状态有OFFLINE, OPENING, OPEN, CLOSING, CLOSED, SPLITTING, SPLIT,
    FAILED_OPEN, FAILED_CLOSE, MERGING, MERGED, SPLITTING_NEW,
    MERGING_NEW, ABNORMALLY_CLOSED

使用方法

setRegionState [<ENCODED_REGIONNAME> <STATE>|-i <INPUT_FILE>...]
   Options:
    -i,--inputFiles  take one or more input files of encoded region names
   and states.
  1. HBCK2 setRegionState de00010733901a05f5a2a3a382e27dd4 CLOSING
  2. HBCK2 setRegionState -i fileName1 fileName2

setTableState

  • 设置表状态,表可能的状态有:ENABLED(\ x08 \ x00),DISABLED(\ x08 \ x01),DISABLING(\ x08 \ x02),ENABLING(\ x08 \ x03)
  • hbase shell中可以通过get ‘hbase:meta’, ‘’, ‘table:state’ 、describe ""来获取表状态
    使用方法
 setTableState [<TABLENAME> <STATE>|-i <INPUT_FILE>...]
   Options:
    -i,--inputFiles  take one or more files of table names and states
  1. HBCK2 setTableState users ENABLED
    返回表之前的状态
  2. HBCK2 setTableState users ENABLED

bypass

  • 传入一个或多个procedure的pid来使其跳过到结束,该procedure的父procedure也将被跳过。如果procedure有子procedure将会失败。
  • 该操作有可能导致region状态不一致,需要手动修复。同时可能需要Master重启来清除被持有的锁。

使用方法

bypass [OPTIONS] [<PID>...|-i <INPUT_FILE>...]
   Options:
    -o,--override   override if procedure is running/stuck
    -r,--recursive  bypass parent and its children. SLOW! EXPENSIVE!
    -w,--lockWait   milliseconds to wait before giving up; default=1
    -i,--inputFiles  take one or more input files of PID's
    -b,--batchSize   number of procedures to process in a batch
  1. HBCK2 bypass 48
  2. HBCK2 bypass -i fileName1 fileName2

generateMissingTableDescriptorFile

  • 该命令会检查TableDescriptor是否缓存在Master中,如果没有则会创建一个默认的.tableinfo文件来恢复。该文件中包含表名、列族列表、TableDescriptor和ColumnFamilyDescriptors的配置项。
  • 执行该命令之后需要对表或列族进行检查
    1.如果表目录缺失或者.tableinfo文件存在则命令无效。
    2.该命令仅仅是生成.tableinfo文件,对于orphan表在文件生成后可能还需要另外修复。
    3.需要指定表名,不指定会默认为所有缺失该文件的表生成

使用方法

generateMissingTableDescriptorFile [OPTIONS] [<TABLENAME>...]

regionInfoMismatch

  • 读取hbase:meta表,对比rowkey中和单元格的编码region名,如果有region名的不一致则进行报告。
  • 如果因为HBASE-23328bug对相关region有影响,可以使用-f选项更新修复。
 regionInfoMismatch
   Options:
   -f,--fix Update hbase:meta with the corrections

replication

  • 查找未删除的复制队列,如果使用-f,则会删除这些队列

使用方法

replication [OPTIONS] [<TABLENAME>...|-i <INPUT_FILE>...]
   Options:
    -f, --fix    fix any replication issues found.
    -i,--inputFiles  take one or more input files of table names

scheduleRecoveries

  • 传递的server格式为’,,'。
  • 为传递的server执行ServerCrashProcedure,如果创建成功则返回pid,如果没有创建则返回-1

使用方法

scheduleRecoveries [<SERVERNAME>...|-i <INPUT_FILE>...]
   Options:
    -i,--inputFiles  take one or more input files of server names
  1. HBCK2 scheduleRecoveries a.example.org,29100,1540348649479
  2. HBCK2 scheduleRecoveries -i fileName1 fileName2

recoverUnknown

  • 对于报告unknow的regionserver执行ServerCrashProcedure。
  • 如果创建Procedure成功则返回pid,没有创建则返回-1。该命令存在2.2.7, 2.3.5,2.4.3,2.5.0或更新的版本

发现问题

master logs

Master负责所有region的分配,regionserver的崩溃处理,集群启停。所有这些都是以Procedures的形式在状态机上运行。每个Procedure都有Procedure id,即pid。通过pid可以在日志中跟踪所有的过程。
比如以下就是一个stuck procedure的例子

2018-09-12 15:29:06,558 WARN org.apache.hadoop.hbase.master.assignment.AssignmentManager: STUCK Region-In-Transition rit=OPENING, location=va1001.example.org,22101,1536173230599, table=IntegrationTestBigLinkedList_20180626110336, region=dbdb56242f17610c46ea044f7a42895b

Master UI

  1. Master UI: /master-status#tables
    可以通过ui观察表的状态
  2. Master UI: ‘Procedures & Locks’
    可以通过此界面观察正在运行的Procedures和持有锁的情况、以及当前的Master Procedure WALs。
    如果发现集群中有卡住的Procedures和锁,或者WALs一直增长,则需要注意。
$ echo "list_locks"| hbase shell &> /tmp/locks.txt
$ echo "list_procedures"| hbase shell &> /tmp/procedures.txt
  1. Master UI: The ‘HBCK Report’
    该界面会展示两个master的两个进程的定时检查结果。
    CatalogJanitor:检查hbase:meta表是否存在overlaps或holes
    HBCK Chore:比对hbase:meta表与hdfs的目录文件

其他方式

  1. HBase Canary Tool
    可以用来测试region的状态
  2. 通过scan hbase:meta表来查看region的状态

你可能感兴趣的:(HBase,hbase,数据库,大数据,HBCK2,修复工具)