1.起因
此次修复数据情况是:服务器中毒导致HBASE异常关闭, 启动各种错误,实在没搞懂就清理了ZK关于HBASE的目录(rmr /hbase 建议先看原因,实在不行在做这个删除ZK操作,不对任何人负责,只是记录我修复的过程,仅供参考),本人的HBASE版本是2.0.5。
2.查找资料
关于如何修复ZK相关数据,查找到了相关文章 (HBase指南 | HBase 2.0之修复工具HBCK2运维指南 https://mp.weixin.qq.com/s/GVMWwB1WsKcdvZGfvX1lcA?spm=a2c4e.11153940.blogcont683107.11.49d762a815MegW),了解工具的历史和试用条件.重要的一个条件的 Master 必须启动,而且UI查看界面可以使用。链接的文章很重要的一点是取github 下载项目如何进行编译,文章是说要改<hbase.version>这个配置。我修改了相关配置但是编译报错了。所以我就没有改配置,直接进行 mvn clean package ,打包的JAR还是可以直接使用的,只有几个命令是不可用的,因为版本问题。但是不影响整体的修复工作,JAR包名称:hbase-hbck2-1.2.0-SNAPSHOT.jar,这个JAR包需要上传到你的服务器。具体使用方法,后续内容会提及
3.修复数据
修复数据的时候要保证MASTER是启动的,可以通过tail -f -n 200 /xxxxx/xxxxxx/hbase-2.0.5/logs/hbase-hadoop-master-hbasemaster.log hbase-hadoop(用户名)-master(master服务)-hbasemaster(应用服务器的hostname).log,没有报错就表示启动成功,或者通过hbase shell也可以查看是否启动成功
A.前提是我们环境是因为启动各种报错,然后我删除了ZK后,hbase这个命名空间的meta表没有任何数据。但是namespace本身是有数据,所以是需要恢复的,恢复流程和我们后写的修复普通表没什么不同,只是换下表名即可(表名hase:namespace和下面的目录路径匹配/hbase/hbase/namespace 后面的目录/hbase/namespace 表示命名空间和表名)
B.一下以用户表为例开始演示修复流程
1.查看需要修复的表:hdfs dfs -ls /hbase/data/product/t_user_label
使用的是hadoop的命令查看的目录,/hbase/data 是HBASE配置的数据根目录,/product/t_user_label 表示的是命名空间和表名,组合的表就是product:t_user_label
2.查看哪些region是没有分配
使用命名/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar addFsRegionsMissingInMeta product:t_user_label
/xxxxxx/xxxxx/hbase-2.0.5/bin/ (表示安装的目录)
-j ./hbase-hbck2-1.2.0-SNAPSHOT.jar (jar的引入方式)
addFsRegionsMissingInMeta product:t_user_label 增加product:t_user_label到meta表中。
xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar --help 可以查看有哪些可用的命令
最下面可以看到有哪些是没有分配region的,因为这个表没有修复过,所以作为修复案例,和上面hdfs dfs -ls /hbase/data/product/t_user_label 查看的目录也可以看出,目录和未分配的region是一致。
根据提示需要重启hbase /xxxxxx/xxxxx/hbase-2.0.5/bin//stop-hbase.sh 和 /xxxxxx/xxxxx/hbase-2.0.5/bin/start-hbase.sh
3.打开master的管理界面 http://xxx.xxx.xxx.xxx:16010/master-status 替换下IP即可,如果不能访问,可以看下是否端口和IP服务器对外开放,IPTABLES设置问题,还有要查看master的启动日志查看master是否启动完成,
界面打开后查看Regions in Transition 提示这个表不能初始化,实际原因是需要分配region
界面上端有如下界面,获取一个服务器的id,后面的命令需要用到
5.随便选择一个ID上面的:1617781509723,使用这个服务作为手动分配region的服务,不用担心负载问题。即时你只配置到这个服务器,HBASE也会自动帮你负载到其他服务,取ID只是为了让命令执行。命令如下:
/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar assigns 1617781509723 04afb633c1e7d4291a8346b3f707d700
/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar assigns 1617781509723 064be6f94771b529acaa956cd6507ade
/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar assigns 1617781509723 0d2f203debd08a3893591554f87e826f
/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar assigns 1617781509723 1870d781f38982776a2fc5fe77c47912
/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar assigns 1617781509723 2b8c9ab134317196eff7e898a90e3481
/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar assigns 1617781509723 3c8fb548ac2ef08687b0fc7c64cdb053
/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar assigns 1617781509723 551a410f04bf420491102c43b9a4f238
/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar assigns 1617781509723 59d371972a1f6ea8a02d9585214e89f8
/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar assigns 1617781509723 60896d8a39b539e2c2b8deb37fbd114e
/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar assigns 1617781509723 6c0837d0cb6736e85a5600006d53e1e2
/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar assigns 1617781509723 7f1cf3f1f1a346f8bffd08cba564420b
/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar assigns 1617781509723 8a9ceb920cf8beb7d95ad98e180b0f23
/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar assigns 1617781509723 96abbdebce0f72858d950754a7976598
/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar assigns 1617781509723 ca12b877f375284f8378d2f2ae886033
/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar assigns 1617781509723 ca5fa48e951c12efbe3e8a454b25b8e4
/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar assigns 1617781509723 cafe78ca52776b4fd054364917602344
执行完后可以在mater的UI界面上的tables,online Regions从原来的0变成了16,标识表加载成功
6.检验下是否可以正常使用hbase shell,count 'product:t_user_label'
基本数据就回复完成.
6.可以查看是否还有漏掉的region没同步
/xxxxxx/xxxxx/hbase-2.0.5/bin/hbase hbck -j ./hbase-hbck2-1.2.0-SNAPSHOT.jar reportMissingRegionsInMeta product:t_user_label
提示:Missing Regions for each table:
product:t_user_label -> No mismatching regions. This table is good! 就表示region分配完成。恢复完成
如果显示还有region未分配继续执行上面的上一步assigns操作