Hive Server2组件分析

版权声明:技术专栏,转载请注明! 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);

猜你喜欢

转载自blog.csdn.net/wankunde/article/details/80083968