一、背景
/hbase/.tmp/data/gzfx/k_user_rate_ecgi_hour1 目录下的文件持续增涨。
HMaster日志:
Caused by: java.io.IOException: The specified region already exists on disk: hdfs://nameservice1/hbase/.tmp/data/gzfx/k_user_rate_ecgi_hour1/88aef651f4d2e3c72f7f9778c1393151
HMaster堆栈日志:
- org.apache.hadoop.hdfs.DFSClient.listPaths(java.lang.String, byte[], boolean) @bci=21, line=2123 (Compiled frame)
- org.apache.hadoop.hdfs.DFSClient.listPaths(java.lang.String, byte[]) @bci=4, line=2106 (Compiled frame)
- org.apache.hadoop.hdfs.DistributedFileSystem.listStatusInternal(org.apache.hadoop.fs.Path) @bci=14, line=743 (Compiled frame)
- org.apache.hadoop.hdfs.DistributedFileSystem.access$600(org.apache.hadoop.hdfs.DistributedFileSystem, org.apache.hadoop.fs.Path) @bci=2, line=113 (Compiled frame)
- org.apache.hadoop.hdfs.DistributedFileSystem$16.doCall(org.apache.hadoop.fs.Path) @bci=5, line=808 (Compiled frame)
- org.apache.hadoop.hdfs.DistributedFileSystem$16.doCall(org.apache.hadoop.fs.Path) @bci=2, line=804 (Compiled frame)
- org.apache.hadoop.fs.FileSystemLinkResolver.resolve(org.apache.hadoop.fs.FileSystem, org.apache.hadoop.fs.Path) @bci=22, line=81 (Compiled frame)
- org.apache.hadoop.hdfs.DistributedFileSystem.listStatus(org.apache.hadoop.fs.Path) @bci=16, line=804 (Compiled frame)
- org.apache.hadoop.fs.FileSystem.listStatus(java.util.ArrayList, org.apache.hadoop.fs.Path, org.apache.hadoop.fs.PathFilter) @bci=2, line=1566 (Compiled frame)
- org.apache.hadoop.fs.FileSystem.listStatus(org.apache.hadoop.fs.Path, org.apache.hadoop.fs.PathFilter) @bci=12, line=1609 (Compiled frame)
- org.apache.hadoop.hbase.util.FSUtils.listStatus(org.apache.hadoop.fs.FileSystem, org.apache.hadoop.fs.Path, org.apache.hadoop.fs.PathFilter) @bci=17, line=1968 (Compiled frame)
- org.apache.hadoop.hbase.backup.HFileArchiver.archiveRegion(org.apache.hadoop.fs.FileSystem, org.apache.hadoop.fs.Path, org.apache.hadoop.fs.Path, org.apache.hadoop.fs.Path) @bci=170, line=125 (Compiled frame)
- org.apache.hadoop.hbase.master.MasterFileSystem.checkTempDir(org.apache.hadoop.fs.Path, org.apache.hadoop.conf.Configuration, org.apache.hadoop.fs.FileSystem) @bci=86, line=556 (Compiled frame)
- org.apache.hadoop.hbase.master.MasterFileSystem.createInitialFileSystemLayout() @bci=69, line=176 (Interpreted frame)
二、影响
1、导致HMaster不能启动,一直处于初始化状态;
2、导致NameNode性能缓慢。
三、解决过程
1、删除/hbase/.tmp/data/gzfx/k_user_rate_ecgi_hour1目录,可以解决HMaster一直处于初始化状态问题.....
这种解决方案只是临时解决,HMaster启动完成之后/hbase/.tmp/data/gzfx/k_user_rate_ecgi_hour1目录下的文件数还是会持续增涨。
2、使用abort_procedure 停止正在运行的procedure,但是有三种情况会导致不能执行成功:
a、procedure不存在;
b、procedure已经完成;
c、停止将会造成损坏(本次执行失败怀疑是第三种原因)。
四、解决方案
先决条件三步走:
a、检查ZK节点,/hbase/table和/hbae/table-lock是否包含对应的表;
b、检查hbase:meta表中是否含有该表;
c、检查/hbase/data/namespace/tablename是否包含该表。
以上如果包含则删除
1、停止HMaster(主和备);
2、备份或删除/hbase/MasterProcWALs/*的内容;
3、删除/hbase/.tmp/data/gzfx目录
4、启动HMaster。
五、彻底解决方案
打补丁:HBASE-20616
六、参考网址:
https://community.cloudera.com/t5/Support-Questions/Hbase-hung-command/m-p/305864#M222591
https://community.cloudera.com/t5/Support-Questions/Zombie-HBase-Table/td-p/304762