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