乐趣区

10大HBase常见运维工具整理

摘要:HBase 自带许多运维工具,为用户提供管理、分析、修复和调试功能。本文将列举一些常用 HBase 工具,开发人员和运维人员可以参考本文内容,利用这些工具对 HBase 进行日常管理和运维。

HBase 组件介绍

HBase 作为当前比较热门和广泛使用的 NoSQL 数据库,由于本身设计架构和流程上比较复杂,对大数据经验较少的运维人员门槛较高,本文对当前 HBase 上已有的工具做一些介绍以及总结。

写在前面的说明:

1)由于 HBase 不同版本间的差异性较大(如 HBase2.x 上移走了 hbck 工具),本文使用的所有命令行运行的环境为 MRS_1.9.3,对应的 HBase 版本为 1.3.1,部分命令在 HBase2 上不支持(有时间的话会对 HBase2 做单独的介绍)。

2)本文所涉及的 HBase 工具均为开源自带工具,不涉及厂商自研的优化和运维工具。

Canary 工具

HBase Canary 是检测 HBase 集群当前状态的工具,用简单的查询来检查 HBASE 上的 region 是否可用(可读)。它主要分为两种模式

1)region 模式(默认),对每个 region 下每个 CF 随机查询一条数据,打印是否成功以及查询时延。

    #对 t1 和 tsdb-uid 表进行检查
    hbase org.apache.hadoop.hbase.tool.Canary t1 tsdb-uid
    #注意:不指定表时扫所有 region

2)regionserver 模式,对每个 regionserver 上随机选一个表进行查询,打印是否成功以及查询时延。

    #对一个 regionserver 进行检查
    hbase org.apache.hadoop.hbase.tool.Canary -regionserver node-ana-coreQZLQ0002.1432edca-3d6f-4e17-ad52-098f2adde2e6.com
    #注意:不指定 regionserver 时扫所有 regionserver

Canary 还可以指定一些简单的参数,可以参考如下

总结:

  • 对集群影响:2 星(只是简单的读操作,region 个数极多的时候会占用少部分请求吞吐)
  • 实用性:2 星

HFile 工具

HBase HFile 查看工具,主要用来检查当前某个具体的 HFile 的内容 / 元数据。当业务上发现某个 region 无法读取,在 regionserver 上由于文件问题无法打开 region 或者读取某个文件出现异常时,可用此工具单独来检查 HFile 是否有问题

# 查看 t1 表下的其中一个 HFile 的详情,打印 KV
hbase org.apache.hadoop.hbase.io.hfile.HFile -v -m -p -f /hbase/data/default/t1/4dfafe12b749999fdc1e3325f22794d0/cf1/06e102be436c449693734b222b9e9aab

使用参数如下:

总结:

  • 对集群影响:1 星(此工具不走 HBase 通道,只是单纯的读取文件,不影响集群)
  • 实用性:4 星(可精确判断具体的 HFile 内容是否有问题)

RowCounter 和 CellCounter 工具

RowCounter 是用 MapReduce 任务来计算表行数的一个统计工具。而和 RowCounter 类似,但会收集和表相关的更细节的统计数据,包括:表的行数、列族数、qualifier 数以及对应出现的次数等。两个工具都可以指定 row 的起止位置和 timestamp 来进行范围查询

# RowCounter 扫描 t1
hbase org.apache.hadoop.hbase.mapreduce.RowCounter t1
#用 CellCounter 扫描 t1 表并将结果写入 HDFS 的 /tmp/t1.cell 目录
hbase org.apache.hadoop.hbase.mapreduce.CellCounter t1 /tmp/t1.cell

使用参数如下:

总结:

  • 对集群影响:3 星(需要起 MapReduce 对表所有 region 进行 scan,占用集群资源)
  • 实用性:3 星(HBase 统计自身表行数的唯一工具,hbase shell 中 count 效率比较低)

Clean 工具

clean 命令是用来清除 HBase 在 ZooKeeper 合 HDFS 上数据的工具。当集群想清理或铲除所有数据时,可以让 HBase 恢复到最初的状态。

# 清除 HBase 下的所有数据
hbase clean --cleanAll 使用参数如下:

总结:

  • 对集群影响: 5 星(删除 HBase 集群上所有数据)
  • 实用性:2 星(除开需要重新设置 HBase 数据的场景如要切换到 HBase on OBS,平时很少会用到)

HBCK 工具

HBase 的 hbck 工具是日常运维过程中使用最多的工具,它可以检查集群上 region 的一致性。由于 HBase 的 RIT 状态较复杂也最容易出现问题,日常运维过程中经常会遇到 region 不在线 / 不一致等问题,此时就可以根据 hbck 不同的检查结果使用相应的命令进行修复。

# 检查 t1 表的 region 状态
hbase hbck t1
#修复 t1 表的 meta 并重新 assign 分配
hbase hbck -fixMeta -fixAssignments t1

由于该工具使用的场景太多太细,此处就不作展开介绍了,可以查看参数的描述来对各种异常场景进行修复。注意:在不清楚异常原因的情况下,千万不要乱使用修复命令病急乱投医,很有可能会使问题本身更糟糕。

使用参数如下:

总结:

  • 对集群影响:4 星(个别 meta 相关命令对集群影响极大)
  • 实用性: 5 星(hbck 是 HBase 运维人员的最基本运维工具)

RegionSplitter 工具

RegionSplitter 是 HBase 的 Pre-splitting 工具,在 table 初始化的时候如果不配置 pre-split 的话,HBase 不知道如何去 split region,这就很大可能会造成后续的 region/regionserver 的热点,最好的办法就是首先预测 split 的切分点,在建表的时候做 pre-splitting,保证一开始的业务访问总体负载均衡。RegionSplitter 能够通过具体的 split 算法在建表的时候进行 pre-split,自带了两种算法:

  • HexStringSplit

使用 8 个 16 进制字符来进行 split,适合 row key 是十六进制的字符串 (ASCII) 作为前缀的时候

  • UniformSplit

使用一个长度为 8 的 byte 数组进行 split,按照原始 byte 值(从 0x00~0xFF)右边以 00 填充。以这种方式分区的表在 Put 数据的时候需要对 rowkey 做一定的修饰,比如原来的 rowkey 为 rawStr,则需要对其取 hashCode,然后进行按照 byte 位反转后放在最初 rowkey 串的前面

# 创建 test_table 表,并使用 HexStringSplit 算法预分区 10 个
hbase org.apache.hadoop.hbase.util.RegionSplitter test_table HexStringSplit -c 10 -f f1
#Tips:此操作等价于在 hbase shell 中 create 'test_table', {NAME => 'f1'},{NUMREGIONS => 10, SPLITALGO => 'HexStringSplit'}

总结:

不管是 HBase 自带的哪一种 pre-split 算法,都是建立在表数据本身的 rowkey 符合它约定格式的条件下,实际用户还是需要按业务来设计 rowkey,并实现自己的 pre-split 算法(实现 SplitAlgorithm 接口)

  • 对集群影响:1 星(创建表操作,不影响其他集群业务)
  • 实用性:3 星(实际 pre-split 都是按实际业务来的,对于测试来说可以使用 HBase 默认的 split 算法来构造 rowkey 格式)

FSHLog 工具

FSHLog 是 HBase 自带的一个 WALs 文件检查和 split 工具,它主要分为两部分功能

  • dump

将某个 WAL 文件中的内容 dump 出来具体的内容

  • split

触发某个 WAL 文件夹的 WAL split 操作

#dump 出某个当前的 WALs 文件中的内容
hbase org.apache.hadoop.hbase.regionserver.wal.FSHLog --dump /hbase/WALs/node-ana-coreqzlq0002.1432edca-3d6f-4e17-ad52-098f2adde2e6.com,16020,1591846214733/node-ana-coreqzlq0002.1432edca-3d6f-4e17-ad52-098f2adde2e6.com%2C16020%2C1591846214733.1592184625801

相关参数

总结:

  • 对集群影响:2 星(触发的 WAL split 操作会对相应的 Worker 节点增加少量的负载,当需要 split 的 WAL 极大时,会对 region 级别的业务有影响)
  • 实用性:4 星(可以很好的检查 WAL 内容的准确性,以及适用于 WAL 搬迁的场景)

WALPlayer 工具

WALPlayer 是一个将 WAL 文件中的 log 回放到 HBase 的工具。可以通过对某个表或者所有表进行数据回放,也可以指定相应的时间区间等条件进数据回放。

# 回放一个 WAL 文件的数据到表 t1
hbase org.apache.hadoop.hbase.mapreduce.WALPlayer /tmp/node-ana-coreqzlq0002.1432edca-3d6f-4e17-ad52-098f2adde2e6.com%2C16020%2C1591846214733.1592184625801 t1

Q&A:FSHLog 和 WALPlayer 都能将 WAL 文件中的数据恢复到 HBase 中,有什么差异区别?

FSHLog 是触发 WAL split 请求到 HMaster 中,会对 WAL 中的所有数据恢复到 HBase,走的是 HBase 自己的 WAL split 流程。而 WALPlayer 是本身起 MR 任务来扫 WAL 文件中的数据,对符合条件的数据 put 到特定的表中或输出 HFile 到特定目录

相关参数:

总结:

  • 对集群影响:3 星(起 MR 任务会占用部分集群资源)
  • 实用性:4 星(在某些特定的场景下实用性很高,如 replication 预同步,表数据恢复)

OfflineMetaRepair 工具

OfflineMetaRepair 工具由于修复 HBase 的元数据。它会基于 HBase 在 HDFS 上的 region/table 元数据,重建 HBase 元数据。

# 重新建立 hbase 的元数据
hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair

Q&A: hbck 的 fixMeta 同样可以修复 HBase 的元数据,还能指定具体的表使用更加灵活,还有必要使用 OfflineMetaRepair?

hbck 工具是 HBase 的在线修复工具,如果 HBase 没有启动是无法使用的。OfflineMetaRepair 是在离线状态修复 HBase 元数据

相关参数:

总结:

  • 对集群影响: 5 星(备份原始元数据表后,会重建 HBase 元数据)
  • 实用性:4 星(当 HBase 由于元数据原因无法启动时,此工具可以恢复 HBase)

Sweeper 工具

Sweeper 工具(HBASE-11644)可以合并 HBase 集群中小的 MOB 文件并删除冗余的 MOB 文件。它会基于 Column Family 起相应的 SweepJob 任务来对相应的 MOB 文件进行合并。注意,此工具不能与 MOB 的 major compaction 同时运行,并且同一个 Column Family 的 Sweeper 任务不能同时有多个一起运行。

# 对 t1 表执行 Sweeper
hbase org.apache.hadoop.hbase.mob.mapreduce.Sweeper t1 cf1

相关参数:

总结:

  • 对集群影响: 5 星(合并 MOB 任务会占用大量的 Yarn 资源和 IO,对业务影响很大)
  • 实用性:2 星(只适合 MOB 场景,使用 MOB 会存在 HMaster 上 compact 的瓶颈暂不推荐(社区 HBASE3 上才支持,相关 jira HBASE-22749))

以上就是此次介绍的所有 HBase 运维工具,其他的如 Bulkload 批量导入,数据迁移,测试相关的 pe 等暂不描述。如果有写的不对的请指正,多谢。

官方文档:https://hbase.apache.org/book…

点击关注,第一时间了解华为云新鲜技术~

退出移动版