Skip to content

🐝Hive概述

1. Hive简介

Hive是由Facebook开源,基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。Hive的出现简化了Hadoop的MapReduce程序处理数据。

2. Hive本质

Hive是一个Hadoop客户端,用于将HQL(Hive SQL)转化成MapReduce程序。

  1. Hive中每张表的数据存储在HDFS
  2. Hive分析数据底层的实现是MapReduce(也可配置为Spark或者Tez)
  3. 执行程序运行在Yarn上

3. Hive架构原理

Hive架构原理图

  1. Client(用户接口):
    CLI(命令行)、JDBC/ODBC。
  2. Metastore(元数据): 元数据包括:数据库(默认是default)、表名、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等。
    默认存储在自带的derby数据库中,由于derby数据库只支持单客户端访问,生产环境中为了多人开发,推荐使用MySQL存储Metastore。
  3. Driver(驱动器):
    • 解析器(SQLParser):将SQL字符串转换成抽象语法树(AST),如下图

    SQL语法树

    比如查询SQL为:select count(*) from test group by id;Alt text

    • 语义分析(Semantic Analyzer):将AST进一步划分为QueryBlock
    • 逻辑计划生成器(Logical Plan Gen):将语法树生成逻辑计划,如下图执行计划
    • 逻辑优化器(Logical Optimizer):对逻辑计划进行优化(比如谓词下推)
    • 物理计划生成器(Physical Plan Gen):根据优化后的逻辑计划生成物理计划,如下图执行计划

    执行物理计划过程

    Alt text

    • 物理优化器(Physical Optimizer):对物理计划进行优化
    • 执行器(Execution):执行该计划,得到查询结果并返回给客户端
  4. 底层基于Hadoop
    使用HDFS进行存储,可以选择MapReduce/Tez/Spark进行计算。