HIVE Tutorial

介绍

Hive是开源的数据仓库工具,用于执行分布式处理和数据分析的。由Facebook开发来解决替代JAVA MR程序的。
Hive使用HQL(Hive Query language),这是一种类似sql的声明式语言。Hive将hive query转换成MR程序。
Hive支持开发者使用hive query来代替写复杂的JAVA MR程序来对结构化和半结构化的数据做处理和分析。
熟悉sql的人就非常容易地写出hive query

Hive Architechture

在这里插入图片描述
上面的图就展示了Hive的架构及它主要的组件。
Hive主要的组件有 Hive ClientHive ServicesProcessing and Resource ManagementDistributed Storage

Hive Client

Hive支持其他语言如Python, Java, C++, Ruby等来使用JDBC, ODBC, and Thrift写application在hive上执行。

  1. Thrift Clients
    由于Hiveserver2本身就是用Thrift来实现的,所以能处理来自于thrift client的请求。

  2. JDBC client
    Hive允许Java applications使用JDBC driver来连接Hive。JDBC driver也是通过Thrift来和Hiveserver2通信的。

  3. ODBC client
    Hive ODBC driver允许基于ODBC协议的应用来连接Hive。类似于JDBC driverODBCdriver也是通过Thrift来和Hiveserver2通信的。

  4. Command Line
    hivebeeline两个命令行,既可以进行交互式操作也可以进行批量sql执行操作。从Hive 0.11版本引入Hiveserver2后,Hiveserver2有自己的一套Command Line即beelinebeeline其实是基于SQLLineJDBC clienthive cli已经过时,官方建议使用新的命令行工具beeline。更加详细的beeline操作可以参考官网NewCommandLineShell

Hive Service
  1. Beeline
    这个在上面的Command Line已经提到了,其实是Hiveserver2提供的一套新的Command Line,还是属于Hiveserver2

  2. Hiveserver2
    HiveServer2HiveServer1的下一个版本。HiveServer2能够让client在hive上执行查询,允许多个client去向hive提交请求并检索最后的查询结果。它是被设计成为为通用的API如JDBC and ODBC提供最好的支持。
    注意:HiveServer1也叫做Thrift server,是基于Apache Thrift protocol来跨平台和hive进行交互的,一样地允许不同的client去向hive提交请求并检索最后的查询结果。但是HiveServer1不能处理来自多个客户端的并发请求,所以HiveServer1就被新版本HiveServer2替代了。

  3. Hive Driver
    Hive Driver接受用户提交的HiveQL语句(如通过命令行提交)。它创建一个session来处理这个query并将该query发送给compiler

  4. Hive Compiler
    Hive compiler 解析这个query。它通过使用存储在metastore上的metadata信息对不同的query blocksquery expressions来做语义分析和类型检查,并生成一个执行计划(execution plan)。
    Hive compiler 创建的执行计划是DAG(有向无环图),其中每个阶段都是map/reduce作业HDFS上的操作元数据操作

  5. Optimizer
    Optimizer 在执行计划上做transformation操作如将多个Join合并成一个join来提高性能,并split task来提高效率和伸缩性。

  6. Execution Engine
    Execution EngineHive compilerOptimizer步骤后,按照其依赖关系(stage之间有依赖关系)使用Hadoop执行编译器创建的执行计划。

  7. Metastore
    Metastore是一个中央存储库,它存储关于表和分区结构的元数据信息,包括列和列类型信息。
    它还存储了读/写操作所需的serializerdeserializer的信息,以及存储数据的HDFS文件地址。这个Metastore通常是一个关系数据库如mysql。
    Metastore为查询和操作hive metadata提供了一个thrift接口。
    由于自带的metastore是derby数据库,仅够学习用,一般生产环境还是会用mysql做metastore。
    可以参考hive安装来将metastore换成mysql。

  8. HCatalog
    HCatalogHadoop的表和存储管理层。它使用户可以使用不同的数据处理工具(如Pig、MapReduce等)轻松地在网格上读写数据。更加通俗地说,HCatalog 提供了一个统一的元数据服务,允许不同的工具如 Pig、MapReduce 等通过 HCatalog 直接访问存储在 HDFS 上的底层文件。

    它建立在Hive metastore的基础上即使用了 Hive 的元数据存储,将Hive metastore的表格数据暴露给其他数据处理工具,这样就使得像 MapReduce 这样的第三方应用可以直接从 Hive 的数据仓库中读写数据。
    HCatalog 是 Apache 的顶级项目,从 Hive0.11.0 开始,HCatalog 已经合并到 Hive 中。也就是说,如果是通过 binary 安装的 Hive0.11.0 之后的版本,HCatalog 已经自动安装了,不需要再单独部署。
    在这里插入图片描述

  9. WebHCat
    WebHCat 就是HCatalogREST API,是一个执行Hive metadata操作的HTTP接口。它为用户提供了运行MR、PIG、Hive作业的服务。

Processing Framework and Resource Management

Hive默认使用MapReduce框架作为执行引擎。也可以使用hive on tez或者hive on spark

Distributed Storage

Hive建立在Hadoop之上,所以它使用底层的HDFS作为分布式存储。

Hive的运行流程

在这里插入图片描述

  1. executeQuery:
    用户接口调用driver的执行接口,即传递HQL语句给driver。

  2. getPlan:
    driver接收到query,为该query创建一个session来处理,然后传递该querycompiler用于生成执行计划(execution plan)。

  3. getMetaData
    compilermetastore发送获取metadata信息的请求。

  4. sendMetaData
    metastore将metadata信息发送给compiler
    compiler用接收到的metadata信息对查询树(query tree)上的表达式(expressions)做类型检查(type-checking)和语义分析(semantic analysis)。然后compiler生成执行计划(execution plan)即DAG有向无环图。对于MapReduce job,该执行计划包括map operator trees(操作在mapper阶段执行)和reduce operator tree(操作在reducer阶段执行)。

  5. sendPlan
    compiler将生成的执行计划发送给driver

  6. executePlan
    在接收到compiler发送的执行计划后,driver将执行计划发送给执行引擎(execution engine)来执行这个计划。

  7. submit job to MapReduce
    执行引擎然后把DAG的各个stage发送给合适的组件。对于每个task,不管是mapper还是reducer,都会使用与表或者中间输出相关的deserializer来从HDFS文件上读取row数据。然后数据会通过关联的操作树传递下去。

    一旦输出内容生成了,它就会通过serializer被写到HDFS的临时文件。这些临时的HDFS文件会给执行计划的下一个MapReduce stage提供数据。
    对于DML操作,最后的临时文件会移动到表的location

  8. sendResult ---- 也包括9,10步骤
    对于查询,当driver执行获取数据的操作时,执行引擎直接读取HDFS的临时文件的内容作为其数据的一部分。driver然后将结果返回给Hive接口。

参考网址

apache-hive-architecture
Hive-Design
HiveClient
HCatlog简单介绍

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值