1. HiveServer1

HiveServer是一种可选服务,允许远程客户端可以使用各种编程语言向Hive提交请求并检索结果。HiveServer是建立在Apache ThriftTM(http://thrift.apache.org/) 之上的,因此有时会被称为Thrift Server,这可能会导致混乱,因为新服务HiveServer2也是建立在Thrift之上的.自从引入HiveServer2后,HiveServer也被称为HiveServer1。

警告

HiveServer无法处理来自多个客户端的并发请求.这实际上是HiveServer导出的Thrift接口所施加的限制,也不能通过修改HiveServer源代码来解决。

HiveServer2对HiveServer进行了重写,来解决这些问题,从Hive 0.11.0版本开始。建议使用HiveServer2。

从Hive1.0.0版本(以前称为0.14.1版本)开始,HiveServer开始被删除。请切换到HiveServer2。

2. HiveServer2

2.1 引入

HiveServer2(HS2)是一种能使客户端执行Hive查询的服务。 HiveServer2是HiveServer1的改进版,HiveServer1已经被废弃。HiveServer2可以支持多客户端并发和身份认证。旨在为开放API客户端(如JDBC和ODBC)提供更好的支持。

HiveServer2单进程运行,提供组合服务,包括基于Thrift的Hive服务(TCP或HTTP)和用于Web UI的Jetty Web服务器。

2.2 架构

基于Thrift的Hive服务是HiveServer2的核心,负责维护Hive查询(例如,从Beeline)。Thrift是构建跨平台服务的RPC框架。其堆栈由4层组成:server,Transport,Protocol和处理器。可以在 https://thrift.apache.org/docs/concepts 找到有关分层的更多详细信息。

2.2.1 Server

HiveServer2在TCP模式下使用TThreadPoolServer(来自Thrift),在HTTP模式下使用Jetty Server。

TThreadPoolServer为每个TCP连接分配一个工作线程。即使连接处于空闲状态,每个线程也始终与连接相关联。因此,由于大量并发连接产生大量线程,从而导致潜在的性能问题。在将来,HiveServer2可能切换到TCP模式下的另一个不同类型的Server上,例如TThreadedSelectorServer。

2.2.2 Transport

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

2.2.3 Protocol

协议责序列化和反序列化。HiveServer2目前正在使用TBinaryProtocol作为Thrift的协议进行序列化。 在未来,可以更多考虑其他协议,如TCompactProtocol,可以考虑更多的性能评估。

2.2.4 处理器

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

2.3 依赖

  • Metastore metastore可以配置为嵌入式(与HiveServer2相同的过程)或远程服务器(也是基于Thrift的服务)。 HS2与查询编译所需的元数据相关。
  • Hadoop cluster HiveServer2准备了各种执行引擎(MapReduce/Tez/Spark)的物理执行计划,并将作业提交到Hadoop集群执行。

3. JDBC Client

推荐使用JDBC驱动程序让客户端与HiveServer2进行交互。请注意,有一些用例(例如,Hadoop Hue),直接使用Thrift客户端,而没有使用JDBC。 以下是进行第一次查询所涉及的一系列API调用:

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

原文:https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Overview#HiveServer2Overview-Introduction

[Hive]HiveServer2概述的更多相关文章

  1. hive的概述和数据类型

    一.Hive概述 1.Hive简介 Hive数据仓库软件有助于使用SQL读取.编写和管理驻留在分布式存储中的大型数据集.提供了命令行工具和JDBC驱动程序以将用户连接到Hive. Hive可以将SQL ...

  2. Hive HiveServer2+beeline+jdbc客户端访问操作

    HiveServer 查看/home/hadoop/bigdatasoftware/apache-hive-0.13.1-bin/bin目录文件,其中有hiveserver2 启动hiveserver ...

  3. [Hive]HiveServer2配置

    HiveServer2(HS2)是一个服务器接口,能使远程客户端执行Hive查询,并且可以检索结果.HiveServer2是HiveServer1的改进版,HiveServer1已经被废弃.HiveS ...

  4. Hive 01 概述、安装配置

    概述 数据仓库:是一个面向主题的.集成的.不可更新的.随时间不变化的数据集合,它用于支持企业或组织的决策分析处理. 数据仓库的结构和建立过程: 数据源 数据存储及管理 ETL Extract 提取 T ...

  5. Hadoop Hive概念学习系列之hive三种方式区别和搭建、HiveServer2环境搭建、HWI环境搭建和beeline环境搭建(五)

     说在前面的话 以下三种情况,最好是在3台集群里做,比如,master.slave1.slave2的master和slave1都安装了hive,将master作为服务端,将slave1作为服务端. 以 ...

  6. Hive 教程(八)-hiveserver2

    hive 的另外一种启动方式是 hiveserver2,它是提供了一种服务,使得我们可以远程操作 hive,就像操作 mysql 一样 hiveserver1 既然有 hiveserver2,肯定有 ...

  7. Hive——安装以及概述

    一.hive的安装 注意:安装hive的前提要安装好MySQL和Hadoop Hadoop安装:https://www.cnblogs.com/lmandcc/p/15306163.html MySQ ...

  8. Hive高级

    HiveServer2 概述: https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Overview2 客户端: https:// ...

  9. Hive 官方手册翻译 -- Hive DDL(数据定义语言)

    Hive DDL(数据定义语言) Confluence Administrator创建, Janaki Lahorani修改于 2018年9月19日 原文链接 https://cwiki.apache ...

随机推荐

  1. Python-Cpython解释器支持的进程与线程

    一.Python并发编程之多进程 1. multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在pyt ...

  2. TP框架基础2

    ---恢复内容开始--- [空操作和空控制器处理] 空操作:就没有指定的操作方法 空控制器:没有指定控制器 http://网址/index.php/Home/User/login http://网址/ ...

  3. maven入门学习(一)

    一.maven介绍 1.软件开发中我们为什么要使用maven呢?(纯属个人体会观点,如有错误,敬请指正) (1)其一,企业岗位需求,目前的IT开发招聘岗位上,基本都要求会使用maven.        ...

  4. React-native Android环境搭建

    基础安装 安装Homebrew Homebrew是Mac OSX的包管理器,我们需要通过Homebrew安装开发React Native的相关软件包. 如果不知道怎样安装Homebrew可以点这里:官 ...

  5. Spring_IOC&DI概述

  6. codeforces 738

    D: 题意:一行1*n的格子放船只,船数为a,船的长度为b,每格为0或1,1表示该格并不是船只的一部分,找出最少的格子数使得射击这些格子至少能打中一艘船. 思路:船的长度为b,即每段连续的长度为b的0 ...

  7. Linux查看服务和强制结束服务

    查看服务id命令,常用的两种:      a: ps -ef | grep 服务名      b: netstat -antp             找到结果名称,然后            pki ...

  8. Spring注解(AOP)

    底层动态代理 程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式 导入aop的相关模块 <!-- https://mvnrepository.com/artifact/org. ...

  9. python 中 正则表达式 的应用

    python 中 正则表达式 的应用 最近作业中出现了正则表达式,顺便学习了一下. python比较厉害的一点就是自带对正则表达式的支持,用起来很方便 正则表达式 首先介绍一下什么是正则表达式. 正则 ...

  10. 我的nodejs 快速入门

    每行以封号结尾(可有可无) 变量定义没有类型 都用var 或者直接const log打印:console.log(db); 内置属性这样写法:__filename.__dirname等 functio ...