官方描述

The Apache Hive™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage and queried using SQL syntax.

Apache Hive 数据仓库软件有助于读、写和管理驻留在分布式存储中并使用SQL语法查询的大型数据集

Built on top of Apache Hadoop™, Hive provides the following features:

构建在Apache Hadoop之上,Hive提供以下功能:

  • Tools to enable easy access to data via SQL, thus enabling data warehousing tasks such as extract/transform/load (ETL), reporting, and data analysis.
  • 工具通过SQL轻松访问数据,从而使像 extract/transform/load(ETL) 和数据分析这样的数据仓库任务成为可能
  • A mechanism to impose structure on a variety of data formats
  • 对各种数据格式强制结构化的一种机制
  • Access to files stored either directly in Apache HDFS™ or in other data storage systems such as Apache HBase™
  • 访问直接在 Apache HDFS 或者像 Apache HBase 这样的其它存储系统中的文件存储
  • Query execution via Apache Tez™, Apache Spark™, or MapReduce
  • 通过 Apache Tez, Apache Spark, MapReduce 执行查询
  • Procedural language with HPL-SQL
  • 基于HPL-SQL的过程语言
  • Sub-second query retrieval via Hive LLAP, Apache YARN and Apache Slider.
  • 通过 Hive LLAP, Apache YARN 和 Apache Slider 进行亚秒级查询检索

总之,Hive是构建于Hadoop之上的一个数据仓库工具,用来进行数据提取、转化、加载及数据分析。

Hive架构

Hive架构及工作原理_hive

Interface:Hive提供三个主要的用户接口

  • CLI 是Shell命令行接口,提供交互式 SQL 查询
  • JDBC/ODBC 是Hive的Java数据接口实现,使远程客户端可以通过Hiveserver2查询数据;例如 beeline 方式
  • WebUI 用户可以通过浏览器访问Hive页面,查看Hive使用的信息

MetaData:Hive将元数据存储在RMDB中,如mysql\Derby\Postgresql。元数据包括表结构、表名、列属性、分区信息、权限信息及Location等信息。

MetaStore: Hive提供的元数据查询服务,通过MetaStore管理、操作元数据。

Hiveserver2: 基于thrift的跨平台、跨编程语言的Hive查询服务。为Hive客户端提供远程访问、查询服务

Driver: Hive 的核心是驱动引擎, 驱动引擎由四部分组成:

  • 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST Abstract-Syntax-Tree)
  • 编译器:编译器是将语法树编译为逻辑执行计划
  • 优化器:优化器是对逻辑执行计划进行优化
  • 执行器:执行器是调用底层的运行框架执行逻辑执行计划

工作流程及原理

Hive架构及工作原理_hive_02

  1. 用户把查询任务提交给Driver驱动程序
  2. 驱动程序将Hql发送给编译器Compiler
  3. 编译器Compiler根据用户查询任务去MetaStore中获取需要的Hive的元数据信息
  4. 编译器Compiler得到元数据信息,对任务进行编译
  • 依据Antlr语法规则,解析HiveQL并转换为AST抽象语法树
  • 遍历AST抽象语法树,抽象出查询的基本组成单元QueryBlock(查询块)
  • 依据QueryBlock生成逻辑执行计划
  • 优化、重写逻辑执行计划,合并不必要的ReduceSinkOperator,降低shuffle
  • 依据逻辑执行计划生成物理执行计划,也就是Hive Job的Task树(默认是MapReduce Job)
  • 优化、重写物理执行计划
  1. 将最终的执行计划(Hive Job)提交给Driver。到此为止,查询解析和编译完成
  2. Driver将执行计划(Hive Job)转交给ExecutionEngine去执行
  3. 在Yarn上,执行作业的过程默认是一个MapReduce任务
  • 执行引擎发送作业给JobTracker
  • JobTracker将task下发给到TaskTracker执行
  • task读、写HDFS数据