HiveServer2 概览

翻译: https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Overview  
版本:2.3.3

  • 介绍
  • HS2架构
    • server
    • transport
    • protocol
    • processor
  • HS2的依赖性
  • JDBC客户端
  • 源代码描述
    • 服务器端
    • 客户端
    • 客户端和服务器之间的交互
  • 资源

介绍

HiveServer2(HS2)是一种服务,它使客户端能够对Hive执行查询。HiveServer2的前身是 HiveServer1已被弃用。HS2支持多客户端并发和身份验证。它旨在为JDBC和ODBC等开放API客户端提供更好的支持。

HS2是作为组合服务运行的单个进程,其中包括基于Thrift的Hive服务(TCP或HTTP)和用于Web UI 的Jetty Web服务器。

HS2架构

基于Thrift的Hive服务是HS2的核心,负责为Hive查询(例如,来自Beeline)提供服务。Thrift是用于构建跨平台服务的RPC框架。它的堆栈由4层组成:服务器,传输,协议和处理器。你可以在https://thrift.apache.org/docs/concepts找到更多的细节。

下面介绍这些层在HS2实现中的用法。

Server

HS2使用TThreadPoolServer(来自Thrift)实现TCP模式,或使用Jetty服务器实现HTTP模式。

TThreadPoolServer为每个TCP连接分配一个工作线程。即使连接闲置,每个线程也始终与连接相关联。因此,由于大量的并发连接而导致大量线程产生潜在的性能问题。未来,HS2可能会切换到另一种服务器模型来实现TCP模式,例如TThreadedSelectorServer。以下是关于不同Thrift Java服务器之间性能比较的文章。

Transport

在客户端和服务器之间需要代理(例如,出于负载平衡或安全原因)时,需要使用HTTP模式。这就是为什么它被支持。您可以通过Hive配置属性hive.server2.transport.mode指定Thrift服务的传输模式。

协议

协议实现负责序列化和反序列化。HS2目前使用 TBinaryProtocol作为Thrift序列化协议。未来可能会考虑其他协议,例如基于更多性能评估的TCompactProtocol。

处理器

流程实现是处理请求的应用程序逻辑。例如,ThriftCLIService.ExecuteStatement()方法实现编译和执行Hive查询的逻辑。

HS2的依赖性

  • Metastore Metastore
    可以配置为嵌入式(与HS2相同的进程),也可以配置为远程服务器(也是基于Thrift的服务)。HS2与Metastore会查询编译所需的元数据。

  • Hadoop集群
    HS2为各种执行引擎(MapReduce / Tez / Spark)准备物理执行计划并将作业提交给Hadoop集群执行。

你可以找到HS2和它的依赖之间的相互作用的图在这里。

HiveServer2 概览_第1张图片
图片.png

JDBC客户端

建议客户端使用JDBC驱动程序与HS2进行交互。请注意,有些使用案例(例如Hadoop Hue)绕过JDBC直接使用Thrift客户端。

下面是一系列API调用,用于进行第一个查询:

  • JDBC客户端(例如Beeline)通过初始化传输连接(例如,TCP连接),然后通过OpenSession API调用来获得SessionHandle来创建HiveConnection 。会话是从服务器端创建的。
  • 执行HiveStatement(遵循JDBC标准),并从Thrift客户端执行ExecuteStatement API调用。在API调用中,SessionHandle信息与查询信息一起被传递给服务器。
  • HS2服务器收到请求并要求驱动程序(它是一个CommandProcessor)进行查询分析和编译。驱动程序启动后台作业,与Hadoop进行对话,然后立即向客户端返回响应。这是ExecuteStatement API的异步设计。响应包含从服务器端创建的OperationHandle。
  • 客户端使用OperationHandle与HS2进行通信来轮询查询执行的状态。

源代码描述

以下各节帮助您在源代码中找到HiveServer2的一些基本组件。

服务器端

  • Thrift IDL file for TCLIService: https://github.com/apache/hive/blob/master/service-rpc/if/TCLIService.thrift.

  • TCL****IService****.Iface implemented by: org.apache.hive.service.cli.thrift.ThriftCLIService class.

  • ThriftCLIService subclassed by: *org.apache.hive.service.cli.thrift.ThriftBinaryCLIService *and org.apache.hive.service.cli.thrift.ThriftHttpCLIService for TCP mode and HTTP mode respectively.

  • **org.apache.hive.service.cli.thrift.EmbeddedThriftBinaryCLIService class: **Embedded mode for HS2. Don't get confused with embedded metastore, which is a different service (although the embedded mode concept is similar).

  • org.apache.hive.service.cli.session.HiveSessionImpl class: Instances of this class are created on the server side and managed by an org.apache.accumulo.tserver.TabletServer.SessionManager instance.

  • org.apache.hive.service.cli.operation.Operation class: Defines an operation (e.g., a query). Instances of this class are created on the server and managed by an org.apache.hive.service.cli.operation.OperationManager instance.

  • org.apache.hive.service.auth.HiveAuthFactory class: A helper used by both HTTP and TCP mode for authentication. Refer to Setting Up HiveServer2 for various authentication options, in particular Authentication/Security Configuration and Cookie Based Authentication.

客户端

  • org.apache.hive.jdbc.HiveConnection class: Implements the java.sql.Connection interface (part of JDBC). An instance of this class holds a reference to a SessionHandle instance which is retrieved when making Thrift API calls to the server.
  • org.apache.hive.jdbc.HiveStatement class: Implements the java.sql.Statement interface (part of JDBC). The client (e.g., Beeline) calls the HiveStatement.execute() method for the query. Inside the execute() method, the Thrift client is used to make API calls.
  • org.apache.hive.jdbc.HiveDriver class: Implements the java.sql.Driver interface (part of JDBC). The core method is connect() which is used by the JDBC client to initiate a SQL connection.

客户端和服务器之间的交互

  • org.apache.hive.service.cli.SessionHandle类:会话标识符。此类的实例从服务器返回,并由客户端用作Thrift API调用的输入
  • org.apache.hive.service.cli.OperationHandle类:操作标识符。此类的实例从服务器返回并由客户端用于轮询操作的执行状态。

资源

如何设置HS2: 设置HiveServer2

HS2客户端: HiveServer2客户端

用户界面: HiveServer2的Web UI

指标: Hive指标

HS2上的Cloudera博客:http : //blog.cloudera.com/blog/2013/07/how-hiveserver2-brings-security-and-concurrency-to-apache-hive/

你可能感兴趣的:(HiveServer2 概览)