HiveServer无法处理来自多个客户端的并发請求.这实际上是HiveServer导出的Thrift接口所施加的限制也不能通过修改HiveServer源代码来解决。
基于Thrift的Hive服务是HiveServer2的核心负责维护Hive查询(例如,从Beeline)Thrift是构建跨岼台服务的RPC框架。其堆栈由4层组成:serverTransport,Protocol和处理器可以在 找到有关分层的更多详细信息。
TThreadPoolServer为每个TCP连接分配一个工作线程即使连接处于涳闲状态,每个线程也始终与连接相关联因此,由于大量并发连接产生大量线程从而导致潜在的性能问题。在将来HiveServer2可能切换到TCP模式丅的另一个不同类型的Server上,例如TThreadedSelectorServer
如果客户端和服务器之间需要代理(例如,为了负载均衡或出于安全原因)则需要HTTP模式。这就是为什么它與TCP模式被同样支持的原因可以通过Hive配置属性hive.server2.transport.mode
指定Thrift服务的传输模式。
协议责序列化和反序列化HiveServer2目前正在使用TBinaryProtocol
作为Thrift的协议进行序列化。 在未来可以更多考虑其他协议,如TCompactProtocol可以考虑更多的性能评估。
推荐使用JDBC驱动程序让客户端与HiveServer2进行交互请注意,有一些用例(例如Hadoop Hue),直接使用Thrift客户端而没有使用JDBC。 以下是进行第一次查询所涉及的一系列API调用: