- 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操作,并不进行重试
HBase中Put操作过程和可能出现的异常
最新推荐文章于 2022-05-13 08:54:15 发布