HBase中Put操作过程和可能出现的异常

  • submit() 调用locateRegion方法 得到对应put操作的region信息
    • 可能出现IOException或者在rpc连接时出现超时错误 出现以上异常会报出相应错误 如果此处出现了异常对应的action不会重试
  • submitMultiActions 记录locationErrors 在日志中打印,创建AsyncRequestFutureImpl ars
  • ars.sendMultiAction将任务提交到异步的线程池运行.如果此过程中出错可以捕获异常并调用receiveGlobalFailure方法
    • 提交之后就是异步进行的,通过taskInProcess来查看task数目
    • 在此过程中可能出现UncheckedException异常,出现异常是结果符合预期
  • 在线程运行时会创建RpcRetryingCaller实例并调用callWithoutRetries方法 此方法用于call    server 此过程中可能出现IOException, RuntimeException异常 出错可以捕获异常并调用receiveGlobalFailure方法 成功则调用receiveMultiAction方法
    • 此处如果出现异常会进行重试,每次重试的等待时间符合HConstants.RETRY_BACKOFF中以一维数组,
  • receiveMultiAction方法,上一步 call server 成功中,判断callWithoutRetries返回的response。 如果存在问题,判读action是否能重做可以加到toRetry队列中,不能重做记录信息。最后判断toRetry队列是否为空,空打印日志提示信息结束,非空则调用resubmit方法。response没有问题结束。  
  • 在receiveGlobalFailure方法中判断之前错误的action是否能重做,可以重做加到toRetry队列中不能则通过日志打印,调用resubmit方法
    • 最后判断toRetry队列是否为空,空打印日志提示信息结束,非空则调用resubmit方法。
  • resubmit方法中 通过throwable类型和numAttempt重试次数判断来判断程序的休眠时间backOffTime,backOffTime与numAttempt关系在HConstants.RETRY_BACKOFF中以一维数组确定在最后调用groupAndSendMultiAction
  • groupAndSendMultiAction 重新得到对应put操作的region信息,得到最新的actionsByServer最后再次调用sendMultiAction方法。
    • 本处将调用findAllLocationsOrFail方法再次进行locate操作,如果出现IO异常,将跳过相应put操作,并不进行重试
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值