【已解决】修改hbase表或删除表时,会报:ERROR Java::JavautilConcurrent::TimeoutException:The procedure 1 is still running
问题背景:
生产中有一个超大表3亿多条数据,每天全量运行,使用hbase的提供的shell命令对创建的表进行添加属性操作或进行删除操作报此异常,虽然重新调度脚本会跑过去,但不能每次都调两遍。
问题解决:
1.查找源码,找到报出这个异常的代码:
1.1因为是操作表时出错的,所以找到HbaseAdmin这个类所在本项目使用jar包 ,hbase-client-1.2.0-cdh5.13.3.jar
1.2找到报异常的地方,查找蛛丝马迹,看不懂没关系,找和超时相关的信息
1.3发现 hbase.client.sync.wait.timeout.msec 默认 600000 有可能有关系,
1.4问题复现:将它添加cm集群的hbase-site.xml的HBase客户端高级配置代码段(安全阀) 属性中去 ,如果你的测试数据量较小,将该属性值调小,重新运行脚本 ,问题出现
1.5生产中将该值调大。
2.小技巧:
2.1在不断试验带有timeout的属性值的过程当中发现怎么才能确保我在cm上配置的属性值是生效的???
2.2可以在linux的hbase交互式命令行中输入:
@shell.hbase.configuration.get("hbase.client.sync.wait.timeout.msec") 获取属性值,只要配置CM上hbase属性值并更新,就重新进入hbase shell交互式命令行,才能获取最新值
2.3有get上面的方法,但是没有set方法,我已经试验过了,你可以重试。
2.4这个方法,是我在官方文档上:http://hbase.apache.org/1.4/book.html找的
$ ./bin/hbase shell -Dhbase.zookeeper.quorum=ZK0.remote.cluster.example.org,ZK1.remote.cluster.example.org,ZK2.remote.cluster.example.org -Draining=false ... hbase(main):001:0> @shell.hbase.configuration.get("hbase.zookeeper.quorum") => "ZK0.remote.cluster.example.org,ZK1.remote.cluster.example.org,ZK2.remote.cluster.example.org" hbase(main):002:0> @shell.hbase.configuration.get("raining") => "false"