---
title: Hive介绍
description: "Hive是基于Hadoop的一个数据仓库工具，可以将结构化的数据文件映射为一张表，并提供类SQL查询功能。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengbds/ecosystemEnable/Hive/topic_0226837102.html
sourcePath: /source/zh/kunpengbds/ecosystemEnable/Hive/topic_0226837102.html
indexId: ebb9ce5223142d5e04f0d5a4a27dd612fa8ecab971545f2b33f21b93c84548b964
---
# Hive介绍

#### Hive工作流

Hive是基于Hadoop的一个数据仓库工具，可以将结构化的数据文件映射为一张表，并提供类SQL查询功能。

图1 Hive工作流

流程大致步骤为：

1. 用户提交查询等任务给Driver。
2. 编译器获得该用户的任务Plan。
3. 编译器Compiler根据用户任务去MetaStore中获取需要的Hive的元数据信息。
4. 编译器Compiler得到元数据信息，对任务进行编译，先将HiveQL转换为抽象语法树，然后将抽象语法树转换成查询块，将查询块转化为逻辑的查询计划，重写逻辑查询计划，将逻辑计划转换为物理的计划（Tez），最后选择最佳的策略。
5. 将最终的计划提交给Driver。
6. Driver将计划Plan转交给ExecutionEngine去执行，获取元数据信息，提交给JobTracker或者SourceManager执行该任务，任务会直接读取HDFS中的文件进行相应的操作。
7. 获取执行的结果。
8. 取得并返回执行结果。

从上面的流程可以看出，影响Hive执行的主要有两部分：

- 编译器任务编译：这部分会直接影响查询计划，不同的查询计划影响实际的物理计划（Tez）。
- Tez引擎：Hive任务的主体。


#### Tez引擎

Tez是基于Hadoop Yarn之上的DAG（Directed Acyclic Graph）计算框架。Tez直接源于MapReduce框架，核心思想是将Map和Reduce两个操作进一步拆分，即Map被拆分成Input、Processor、Sort、Merge和Output，Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等，被分解后的元操作可灵活组合，产生新的操作，这些操作经一些控制程序组装后，可形成一个大的DAG作业。采用Tez计算框架，生成一个简洁的DAG作业，算子跑完不退出，下轮继续使用上一轮的算子，这样大大减少磁盘IO操作，从而计算速度更快。


总结起来，Tez有以下特点：

- 运行在Yarn之上。
- 与MapReduce兼容，继承了MapReduce的各种优点（比如良好的扩展性与容错性）。
- 适用于DAG应用场景。

Tez在底层提供了DAG编程接口，用户利用这些接口进行程序编写，其主要由两部分组成：数据处理引擎和DAGAppMaster，其中数据处理引擎为其提供了一套编程接口和数据计算操作符，而DAGAppMaster则是一个Yarn ApplicationMaster，它使得Tez应用程序可运行在Yarn上。

简单举例演示，例如以下Hive SQL会翻译成四个MR作业，而采用Tez则生成一个DAG作业，可大大减少磁盘IO。
