HiveServer2 概览

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

介绍

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和它的依赖之间的相互作用的图在这里

图片.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/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容