hbase 线程处理

本文深入探讨了HBase初始化时创建的线程池、队列和执行线程的架构,详细解释了执行Callable的流程,包括设置超时时间、获取RPC链接、执行RPC操作及关闭实例的过程。同时,文章阐述了HBaseRpc的RPC机制,重点介绍了HBaseRpc如何通过代理机制与服务端进行交互,以及如何通过自定义实现的RpcEngine来定制客户端行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初始化HTable的时候会创建一个线程池(ThreadpoolExcutor)最大线程数为Int.maxValue ,ThreadPool中队列为异步队列SynchronousQueue  到此执行线程的架子搭好了、搭好架子之后就开始执行具体的任务啦。

执行的一个 callable  , 由于submit 提交callable的话是调用call方法,在call方法中初始化一个 ServerCallable  (继承自callable ),然后调用 withoutRetries  执行RPC操作,详细如下:

beforeCall :设置HbaseRpc的timeout  默认是 Int 最大值

connection:1、 获得regionLocation  2、获取server即 HRegionInterface  。 locateRegion就不讲了、就是通过zk获取region所在的RS。讲解RPC链接之前想将一下HbaseRpc



HbaseRpc  Rpc机制主要类, 主要有设置超时时间、获取RpcEngine, RpcEngine是一个接口、可以自定义实现RpcEngine,RpcEngine中主要方法包含:

getProxy:创建客户端代理

getServer: 获取一个RPCServer

call:远程调用

close :关闭实例

Hbase0.94 中 RpcEngine的实现是 WritableRpcEngine  ,在WritableRpcEngine   中会初始化HBaseClient ,HBaseClient是一个IPC(进程间通讯)服务客户端,初始化HbaseClient 主要是初始化一些IPC连接的参数,比如maxRetries 、 tcpNoDelay、tcpKeepAlive、socketfactory等信息。




HRegionInterface 作为客户端跟服务端交互的统一交互接口

如果想要对客户端的HRegionInterface 进行操作能让服务端执行就需要对 HRegionInterface 进行代理。也就是 HBaseRpc. waitForProxy() ----里面---> RpcEngine.getProxy()

在RpcEngine里面创建真正的代理如下: (T为实现protocol接口的实现类)

T proxy =
          (T) Proxy.newProxyInstance(
              protocol.getClassLoader(), new Class[] { protocol },
              new Invoker(client, protocol, addr, userProvider.getCurrent(), conf,
                  HBaseRPC.getRpcTimeout(rpcTimeout)));

上面代码主要意思就是将所有对 T的操作都需要交给 Invoker  的Invoker方法处理 ( Invoker 实现 InvocationHandler ),Invoker方法就会



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值