HBase作为当前比较热门和广泛使用的NoSQL数据库,由于本身设计架构和流程上比较复杂,对大数据经验较少的运维人员门槛较高,本文对当前HBase上已有的工具做一些介绍以及总结。
写在前面的说明:
1) 由于HBase不同版本间的差异性较大(如HBase2.x上移走了hbck工具),本文使用的所有命令行运行的环境为MRS_1.9.3,对应的HBase版本为1.3.1,部分命令在HBase2上不支持(有时间的话会对HBase2做单独的介绍)。
2) 本文所涉及的HBase工具均为开源自带工具,不涉及厂商自研的优化和运维工具。
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还可以指定一些简单的参数,可以参考如下
总结:
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
使用参数如下:
总结:
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
使用参数如下:
总结:
clean命令是用来清除HBase在ZooKeeper合HDFS上数据的工具。当集群想清理或铲除所有数据时,可以让HBase恢复到最初的状态。
#清除HBase下的所有数据
hbase clean --cleanAll使用参数如下:
总结:
HBase的hbck工具是日常运维过程中使用最多的工具,它可以检查集群上region的一致性。由于HBase的RIT状态较复杂也最容易出现问题,日常运维过程中经常会遇到region不在线/不一致等问题,此时就可以根据hbck不同的检查结果使用相应的命令进行修复。
#检查t1表的region状态
hbase hbck t1
#修复t1表的meta并重新assign分配
hbase hbck -fixMeta -fixAssignments t1
由于该工具使用的场景太多太细,此处就不作展开介绍了,可以查看参数的描述来对各种异常场景进行修复。注意:在不清楚异常原因的情况下,千万不要乱使用修复命令病急乱投医,很有可能会使问题本身更糟糕。
使用参数如下:
总结:
RegionSplitter是HBase的Pre-splitting工具,在table初始化的时候如果不配置pre-split的话,HBase不知道如何去split region,这就很大可能会造成后续的region/regionserver的热点,最好的办法就是首先预测split的切分点,在建表的时候做pre-splitting,保证一开始的业务访问总体负载均衡。RegionSplitter能够通过具体的split算法在建表的时候进行pre-split,自带了两种算法:
使用8个16进制字符来进行split,适合row key是十六进制的字符串(ASCII)作为前缀的时候
使用一个长度为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接口)
FSHLog是HBase自带的一个WALs文件检查和split工具,它主要分为两部分功能
将某个WAL文件中的内容dump出来具体的内容
触发某个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
相关参数
总结:
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到特定目录
相关参数:
总结:
本文系作者在时代Java发表,未经许可,不得转载。
如有侵权,请联系nowjava@qq.com删除。