HBase之HBCK2

这篇具有很好参考价值的文章主要介绍了HBase之HBCK2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 对于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’, ‘<TABLENAME>’, ‘table:state’ 、describe "<TABLENAME>"来获取表状态
    使用方法
 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格式为’<HOSTNAME>,<PORT>,<STARTCODE>'。
  • 为传递的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的例子文章来源地址https://www.toymoban.com/news/detail-762058.html

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之HBCK2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python读取hbase数据库

    1. hbase连接 首先用hbase shell 命令来进入到hbase数据库,然后用list命令来查看hbase下所有表,以其中表“DB_level0”为例,可以看到库名“baotouyiqi”是拼接的,python代码访问时先连接: 备注:完整代码在最后,想运行的直接滑倒最后复制即可 2. 按条件读取hbase数据 然后按照条件

    2024年04月09日
    浏览(50)
  • 分布式数据库HBase

    HBase是一个高可靠、高性能、 面向列 、可伸缩的分布式数据库,是谷歌BigTable的开源实现,主要用来存储非结构化和把结构化的松散数据。 HBase的目标是处理非常庞大的表,可以通过水平扩展的方式,利用 廉价计算机集群 处理由超过10亿行数据和数百万列元素组成的数据表。

    2024年02月09日
    浏览(55)
  • 【大数据】分布式数据库HBase

    目录 1.概述 1.1.前言 1.2.数据模型 1.3.列式存储的优势 2.实现原理 2.1.region 2.2.LSM树 2.3.完整读写过程 2.4.master的作用 本文式作者大数据系列专栏中的一篇文章,按照专栏来阅读,循序渐进能更好的理解,专栏地址: https://blog.csdn.net/joker_zjn/category_12631789.html?spm=1001.2014.3001.5482 当

    2024年04月27日
    浏览(46)
  • HBase的数据库与HadoopEcosyste

    HBase是一个分布式、可扩展、高性能、高可用性的列式存储系统,基于Google的Bigtable设计。HBase是Hadoop生态系统的一个重要组成部分,与Hadoop HDFS、MapReduce、ZooKeeper等产品密切相关。本文将从以下几个方面进行深入探讨: 背景介绍 核心概念与联系 核心算法原理和具体操作步骤

    2024年02月20日
    浏览(43)
  • 使用IDEA连接hbase数据库

     Hbase是安装在另一台LINUX服务器上的,需要本地通过JAVA连接HBase数据库进行操作。由于是第一次接触HBase,过程当中百度了很多资料,也遇到了很多的问题。耗费了不少时间才成功连接上。特记录下过程当中遇到的问题。 JAVA连接HBase代码如下: 首先通过POM将需要的JAR包导入。

    2024年02月03日
    浏览(88)
  • 大数据NoSQL数据库HBase集群部署

    目录 1.  简介 2.  安装 1. HBase依赖Zookeeper、JDK、Hadoop(HDFS),请确保已经完成前面 2. 【node1执行】下载HBase安装包 3. 【node1执行】,修改配置文件,修改conf/hbase-env.sh文件 4. 【node1执行】,修改配置文件,修改conf/hbase-site.xml文件 5. 【node1执行】,修改配置文件,修改conf/regi

    2024年02月08日
    浏览(50)
  • HBase的数据库备份与恢复策略

    HBase是一个分布式、可扩展、高性能的列式存储系统,基于Google的Bigtable设计。它是Hadoop生态系统的一部分,可以与HDFS、MapReduce、ZooKeeper等组件集成。HBase具有高可用性、高可扩展性和高性能等优势,适用于大规模数据存储和实时数据处理。 在实际应用中,数据备份和恢复是

    2024年02月19日
    浏览(57)
  • HBase的数据库安全与权限管理

    HBase是一个分布式、可扩展、高性能的列式存储系统,基于Google的Bigtable设计。它是Hadoop生态系统的一部分,可以与HDFS、MapReduce、ZooKeeper等组件集成。HBase具有高可靠性、高性能和高可扩展性等特点,适用于大规模数据存储和实时数据处理。 在现代企业中,数据安全和权限管

    2024年02月20日
    浏览(43)
  • HBase的数据库容量规划与优化

    HBase的数据库容量规划与优化 HBase是一个分布式、可扩展、高性能的列式存储系统,基于Google的Bigtable设计。它是Hadoop生态系统的一部分,可以与HDFS、MapReduce、ZooKeeper等组件集成。HBase适用于大规模数据存储和实时数据访问场景,如日志处理、实时统计、搜索引擎等。 在实际

    2024年02月20日
    浏览(42)
  • 大数据NoSQL数据库HBase集群部署——详细讲解~

    HBase 是一种分布式、可扩展、支持海量数据存储的 NoSQL 数据库。 和Redis一样,HBase是一款KeyValue型存储的数据库。 不过和Redis设计方向不同 Redis设计为少量数据,超快检索 HBase设计为海量数据,快速检索 HBase在大数据领域应用十分广泛,现在我们来在node1、node2、node3上部署H

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包