概要描述
本文描述了 dstool 的使用方法,以及几种使用场景。
详细描述
dstool 主要应用于应用场景
-
出现 Regions in Transition(简称RIT)
在active master的60010页面,Tasks一栏下面出现 "Regions in Transition",有region项目出现在此,并且RIT time(ms)这一项已经超出了1小时,此时可以运行此runDSTools.sh工具或者runHFileCheck.sh工具进行修复 -
meta表损坏
当HBase集群因meta表损坏启动不了时,可以运行runDSTools.sh工具进行HBase彻底的元信息重建更新,然后再启动集群。 -
当hbase出现部分表无法查询时
当出现hbase表出现部分表无法查询时,且hbase active master的60010页面中的“Regions in Transition”也没有显示任务region卡住的现象时,可以运行runDSTools.sh工具进行修复。
1、dstool 工具的获取
- TDH 6.x dstool 已经内置在 TDH-Client
具体路径为./TDH-Client/dstools
PS:TDH6.x 的 dstool 在使用之前,需要修改 init.sh 脚本,将脚本里面这一行 HBASE_HOME=$currentPath/hbase ,修改为 export HBASE_HOME=$currentPath/hbase ,然后 source init.sh ,再重新执行 dstool 相关命令
- TDH 4.x 和 TDH 5.x 的 dstool 使用
TDH4.x 和TDH5.x 可以联系星环科技技术支持中心获取对应版本的 dstool 工具。
内部员工可以到 http://172.16.3.121/document/DSTools/ 获取对应版本的 dstool 工具。
2、dstool 工具的使用配置
本文以5.1.2 环境为例,介绍一下 dstool 工具的使用。
下载对应的dstool的包上传至服务器并解压,得到 dstools-1.0.0-transwarp-5.1
目录
tar -zxvf dstools-1.0.0-transwarp-5.1.tar.gz
将 dstool 的配置文件目录下的 conf/hbase-site.xml 、conf/hdfs-site.xml 和 core-site.xml
替换成当前集群的配置文件。
PS:
- hbase-site.xml 在 /etc/hyperbase1/conf/ 下
- hdfs-site.xml 在 /etc/hdfs1/hdfs-site.xml 下
- core-site.xml 在 /etc/hdfs1/core-site.xml 下
TDH 6.2.2 之后的,都不需要复制配置文件了;
但是需要做特殊的前置配置:
具体参考如下:
https://kb.transwarp.cn/posts/11280
解压并配置完成后的 dstool 目录结构如下:
DSTools-1.0.0-transwarp-5.1
├── bin
│ ├── mergeRegion.sh
│ ├── runDSTools.sh
│ └── runHFileCheck.sh
├── conf
│ ├── core-site.xml
│ ├── hbase-site.xml
│ ├── hdfs-site.xml
│ └── log4j.properties
└── lib
3、dstool 使用说明
在使用dstool之前,需要检查确认 hdfs 是否正常,包括如下检查:
-
hdfs是否在安全状态(即safe mode)
从TDH管理界面中找到hdfs中active namenode角色,点击link进入检查节点是否处于safemode;保证safemode处于关闭状态,即“Safemode is off”。 -
查看所有namenode和datanode的状态
从manager界面去检查每个角色的状态 ,或者命令检查hdfs dfsadmin -report
-
查看hdfs有无block丢失或损坏
hdfs fsck /hyperbase1 -files -locations -blocks
-
查找出 corruptfile 文件
查找出 corruptfile 文件,在运行修复工具前检查这些损坏的文件hdfs fsck /hyperbase1 -list-corruptfileblocks
4 runDSTools.sh 操作步骤
runDSTools.sh 可以在以下两种情况下执行:
- 如果 Hbase 集群本身启动不了
保证所有HBase角色服务都关闭,集群hyperbase状态为down,保证所有角色都是not running的状态。
- HBase集群已经启动正在运行,则需要保证所有 regionserver 都是在线存活状态,并且至少有两个及以上的 master 角色在线存活状态。
执行 source TDH-Client/init.sh,认证hbase身份,然后在工具所在目录下,执行
sh runDSTools.sh [table_name]
指定table_name选项可以针对特定的表进行修复。当用户要修整个集群或者一张大表时,推荐以下命令在后台跑,避免超时。
nohup sh runDSTools.sh [table_name] &
-
如果HBase集群中只有一个active master(必要条件),但是region server和其余master都无法启动时
需要运行命令:sh runDSTools.sh [table_name] -allowDeadRS true
在有dead region server的情况下进行恢复
-
查看日志
dstool运行的输出日志,查看最后的输出日志提示。如果运行时,集群是在线模式,正确的日志应该显示 inconsistance 为0。
如果集群本身是启动不了的情况,运行后,它会提示你可以在TDH管理界面中启动HBase集群的信息。
- 如果日志中出现连续的错误:“There is an overlap in the region chain”
添加参数运行命令,其中number应该大于inconsistance的数量。sh runDSTools.sh [table_name] -maxMerge [number]
5 runHFileCheck.sh 操作步骤
runHFileCheck.sh 只能在HBase集群为在线模式,即至少有一个master存活,至少有一个regionserver存活的情况下执行。
- 运行命令看是否有hfile有损坏或无效引用存在。
sh runHFileCheck.sh tableName 1>&2 2> /tmp/hfilecheck.log.1
运行命令输出,若无损坏:
- 若有损坏,HFiles corrupted数量不为0
- 运行命令修复
sh runHFileCheck.sh -fixReferenceFiles -sidelineCorruptHFiles tableName 1>&2 2> /tmp/hfilecheck.log.2
6 mergeRegion.sh 操作步骤
mergeRegion.sh 可以在以下情况下运行:HBase集群为在线模式,即至少有一个master存活,至少有一个regionserver存活
且 mergeRegion 工具必须在 activemasterHost 所在集群的节点上运行。
mergeRegion 工具只能对同一张表使用一次
- 打开HBase集群的master管理界面,查看需要mergeRegion的表的Region数目。
待执行mergeRegion操作的表 aaaaa 的Region数是16。
- 运行命令
sh mergeRegion.sh [activemasterHost] [tableName]
activemasterHost : active hmaster的ip或hostname。
tableName : 为所需要merge region的table name
- 结果
执行mergeRegion操作后的表 aaaaa 的Region数是8,为之前的一半。 此工具执行一次,把表的相邻的两个Region进行合并,最后实现表的Region数大约减半的效果。