版权声明:技术专栏,转载请注明! https://blog.csdn.net/wankunde/article/details/80083968
组件关系图
HiveServer2
作用 : 启动Hive Server2 入口
主要实现内容
- 启动CliService服务
- 启动
new ThriftBinaryCLIService(cliService);
通过thrift的TThreadPoolServer用线程池来接收外部请求,然后调用父类ThriftCLIService
类处理请求, - 使用zookeeper对Java服务进行管理
ThriftBinaryCLIService
- client端通过
ThriftCLIServiceClient
通过thrift进行RPC请求 - 服务器端
TThreadPoolServer
通过自定义线程池ExecutorService HiveServer2-Handler-Pool
,来接收外部请求 - 通过
CliService
服务实现接口调用
CliService
直接接收外部请求,进行服务
- 会话管理
- 元数据查询
- 主要操作
- openSession
- closeSession
- executeStatement(sesssionHandle,statement)
- executeStatementAsnc(..)
- getOperationStatus()
- cancelOperation()
- closeOperation()
- …
SessionManager
- Session的打开和关闭
- 通过handleToSession对所有Session通过对应的handle进行管理
- 使用ThreadLocal 管理: ipAddress,UserName,ProxyUserName
- backgroundOperationPool : HiveServer2-Background-Pool serve different request 用于后台提交Operator并运行的线程池
OperationManager
- operator 查询和管理,result结果获取
- handleToOperation : 所有Operator通过对应的handle进行管理
HiveSessionImpl
- SessionState : encapsulates common data associated with a session
- Set opHandleSet 操作历史列表
- SessionHandle sessionHandle 用于会话管理
- username,password,hiveConf,ipAddress
- sessionManager,operationManager
- Hive sessionHive
- acquire() : 将当前Session的sessionState 关联到当前Thread的ThreadLocal对象中
- release() :如果调用该方法的Thread 是ThreadWithGarbageCleanup,则cacheThreadLocalRawStore
Thrift 编程接口
Hello.Iface接口
Server 端实现
HelloServiceImpl implements Hello.Iface
TProcessor tprocessor = new Hello.Processor<Hello.Iface>(new HelloServiceImpl())
TServer server = new TSimpleServer(tArgs);
server.serve();
客户端调用
Hello.Client client = new Hello.Client(protocol);