介绍

Hive是基于Hadoop构建的数据仓库系统,能够处理Hadoop上的结构化,非结构化数据。在Hive之前,必须编写复杂的MapReduce程序,在Hive之后,Hive能够将SQL转换为MapReduce。Hive简化了Hadoop的复杂,对Hive来说不需要学习Java,Hive以表的方式来组织数据。

历史

Hive是由Facebook开发的,在Facebook中Hive处理2PB的数据量,每天加载15TB的数据量。现在由许多公司一起协同开发,例如Amazon,IBM,Yahoo,Netflix等等。

为什么使用Hive

对于只懂SQL的用户,编写复杂的MapReduce程序非常困难,Hive简化了MapReduce的复杂性,具有以下优点:

  1. schema的灵活与演进
  2. 表可以分区
  3. Hive表可以直接定义在HDFS数据上
  4. JDBC/ODBC驱动可用
  5. 简化MapReduce的复杂性
  6. 业务分析人员能够处理大数据
  7. 不需要学习Java

Hive架构

  1. Metastore
    存储每张表的元数据信息,例如表的schema,表位置,表分区信息等等,以关系型数据库存储这些信息,存储这些信息是为了跟踪HDFS上的数据
  2. Driver
    它像是接收HQL查询的控制器,监控执行的生命周期和进度。存储在HQL查询执行中生成的必要元数据信息,也会收集Reduce操作后的查询结果。
  3. Compiler
    编译HQL查询,转换查询到执行计划,执行计划包含MapReduce操作的步骤。转换查询到Abstract Syntax Tree(AST),首先会检查兼容,编译错误问题,然后转化AST到Directed Acyclic Graph(DAG)
  4. Optimizer
    在执行计划上进行转换来优化DAG,例如转换一系列Joins操作到一个Join操作。为了更好性能,会切割执行执行计划中的任务。
  5. Executor
    只要编译,优化完成之后,executor执行流水式任务
  6. CLI,UI,Thrift Server
    CLI为用户提供界面与Hive交互,Hive中的Thrift server允许用户通过网络与Hive进行交互。

Hive Shell

Hive Shell是与Hive交互的基本方式,运行Hive Shell有两种方式:

  1. 交互式
    进入Hive Shell,直接运行查询,得到查询结果
  2. 非交互式
    使用-f选项可以运行包含HQL查询的文件,例如,hive -f my-script.sql

Hive特性

  1. 提供以简单的方式进行数据汇总,查询,分析
  2. 支持外部表
  3. Hive非常适应hadoop底层的界面需求
  4. 支持表分区
  5. Hive支持基于规则优化器来优化逻辑计划
  6. 伸缩性,熟悉行,扩展性
  7. 使用HQL并需要编程语言的技能
  8. Hive很容易处理Hadoop上的结构化数据
  9. 使用Hive进行即席查询

Hive限制

  1. 不支持实时查询,行级修改
  2. 不适合online transaction processing
  3. Hive查询的延迟比较高