HBase客户端连接服务端时长时间无法连接成功
问题
在HBase服务端出现问题,无法提供服务,此时HBase客户端进行表操作,会出现该操作挂起,长时间无任何反应。
回答
问题分析
当HBase服务端出现问题,HBase客户端进行表操作的时候,会进行重试,并等待超时。该超时默认值为Integer.MAX_VALUE (2147483647 ms),所以HBase客户端会在这么长的时间内一直重试,造成挂起表象。
解决方法
HBase客户端提供两个配置项来控制客户端的重试超时方式,如表1。
在“客户端安装路径/HBase/hbase/conf/hbase-site.xml”配置文件中配置如下参数。
配置参数 |
描述 |
默认值 |
---|---|---|
hbase.client.operation.timeout |
客户端操作超时时间。需在配置文件中手动添加。 |
2147483647 ms |
hbase.client.retries.number |
最大重试次数。用于表示所有可重试操作所支持的最大重试次数。 |
35 |
这两个参数的重试超时的配合方式如图1所示。
从该流程可以看出,如果未对这两个配置参数根据具体使用场景进行配置,会造成挂起迹象。建议根据使用场景,配置合适的超时时间,如果是长时间操作,则把超时时间设置长一点;如果是短时间操作,则把超时时间设置短一点。而重试次数可以设置为:“(hbase.client.retries.number)*60*1000(ms)”。刚好大于“hbase.client.operation.timeout”设置的超时时间。