目录
[显示]

1.摘要

今天意外翻到了以前整理的hbase连接超时的研究,在这里存一份。针对hbase0.96版本。

2.参数分析

  • socket建连时间

    默认值:

生效位置:

  • socket建连重试次数,对io错误和socket超时分别计算重试次数 默认值:

生效位置:

注释里的45不知道怎么来的。

  • socket超时 初始值:

这个值在RpcRetryingCaller:87被改写:

calltimeout默认值:

每次调用时会把这个值跟default做比较,取小的那个

传入的timeout是由HConnectionImplementation传下来的:

每次rpc调用的超时是hbase.client.operation.timeout和hbase.rpc.timeout里较小的那个,并且每次重试会重算hbase.client.operation.timeout,hbase.client.operation.timeout最小为2s。

  • 异常重试sleep时间,包含建连异常、调用异常等

  • 调用异常重试次数

  • operation超时时间 初始值:

参数的callTimeout从HTable里传进来:

生效位置:

  • zk超时

这个值没仔细看究竟是干啥的

  • zk取meta超时 使用的是Hconncetion的timeout:hbase.rpc.timeout

3.总结:

一次调用的时间轴大概是:(带*的为可缓存操作)

  1. getconnection在初始化时完成,不考虑。

  2. hConnection.getTable ->
    *zk取meta(hci.rpcTimeout) ->
    *meta ragion scan数据 ,超时与get类似,但callWithRetries里没有限制超时。

  3. hTable.get ->
    RpcRetryingCaller.callWithRetries(最小为callable.call超时+hbase.client.pause,最大为Max((callable.call超时+hbase.client.pause),(callable.call超时+hbase.client.pause+hbase.client.operation.timeout)) ->

    RpcClient.call中:
    socket建连超时:(ipc.socket.timeout+hbase.client.pause)*hbase.ipc.client.connect.max.retries
    socket超时:Min(hbase.rpc.timeout,Max(hbase.client.operation.timeout-已用时间,2000))