日志

Thrift操作HBase一段时间后服务挂掉的问题

最近在python项目中通过thrift API操作HBase,发现thrift server在执行操作后运行一段时间就会crash,一番折腾发现这是HBase-thrift的天炸BUG

抛出异常

[thrift-worker-11] thrift.ThriftServerRunner$HBaseHandler: Can't get the location
at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.getRegionLocations(RpcRetryingCallerWithReadReplicas.java:309)  at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:153)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:61)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:200)
    ...

异常原因描述

当空闲的连接从thrift server被清除的时候,该连接之下的table实例依然缓存在线程的local cache中,当再次操作table的时候自然会出现 Can’t get the location 的异常,因为连接早已关闭.


异常影响

受影响版本:

0.98.13, 1.1.1, 1.0.1.1, 1.1.0.1

已修复版本:

2.0.0, 0.98.14, 1.0.2, 1.2.0, 1.1.2, 1.3.0

Thrift影响:

该Bug出现在Thrift1中,Thrift2没有这个问题


解决方法

替换已修复版本的jar依赖,注意版本兼容问题(例如:v1.1.1的修复参考请替换为v1.1.2

转载请注明出处:

© http://hejunhao.me