一.场景分析
大数据环境频繁使用metastore连接HBase加载数据时,偶尔会抛出hbase.rpc.timeout异常导致任务直接失败的情况。
异常信息:
Caused by: org.apache.hadoop.hbase.ipc.CallTimeoutException: Call id=2, waitTime=600020, operationTimeout=600000 expired.
at org.apache.hadoop.hbase.ipc.Call.checkAndSetTimeout(Call.java:73)
at org.apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.java:1245)
... 13 more
或
org.apache.hadoop.hbase.regionserver.LeaseException: lease '5008606692699215376' does not exist
或
WARN org.apache.hadoop.ipc.HBaseServer: IPC Server listener on 60020: readAndProcess threw exception java.io.IOException: Connection reset by peer. Count of bytes read: 0
java.io.IOException: Connection reset by peer
一般都是rpc.timeout的默认时长60s内请求没有获取到响应,客户端直接关闭导致的,适当调大该参数有利于应对高并发的场景。
二.解决方案【以Spark程序为例】
动态指定hbase.rpc.timeout参数:
.config("hbase.rpc.timeout", "300000") // 设置rpc连接超时时间为5分钟