简介

Hive最早由Facebook开源,用于解决海量结构化日志的数据统计。Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储(将结构化的数据文件映射为一张表)、查询(类SQL)和分析存储在Hadoop中的大规模数据的机制。通俗的讲就是:解析用户编写的HQL,匹配对应的**Hive内置**MapReduce模板,之后由Yarn执行模板对应的MR任务,数据存储在HDFS之上。

  • Hive处理的数据存储在HDFS
  • Hive分析数据底层的实现是MapReduce
  • 执行程序运行在Yarn上

    架构

    image.png
    Hive引擎架构:
    hive1111111.png

    组件

    hiveserver_iteblog.png
组成 组件 描述
客户端 CLI 命令行,即hive shell
JDBC/ODBC java访问hive
Beeline CLI thrift方式访问hive
WebGUI 通过浏览器访问Hive
元数据 Derby(默认) Hive将元数据存储在数据库中。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。默认存储在自带的**Derby数据库中(Derby只允许单进程访问),推荐使用MySQL**存储Metastore。
MySQL(5.6.17+)
Postgres(9.1.13+)
Oracle(11g+)
MS SQL Server(2008 R2+)
驱动器 SQL

Parser | 解析器:将SQL字符串转换成抽象语法树(AST),这一步一般都用第三方工具库完成,比如Druid、antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。 | | | Physical Plan | 编译器:将AST编译生成逻辑执行计划。 | | | Query Optimizer | 优化器:对逻辑执行计划进行优化。 | | | Execution | 执行器:把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Tez/Spark/Flink。 |

说明:下图中的Hive Service对应进程“RunJar”,__指的是CLI或Beeline。
M1.png
1.png
总结:

  1. 单机使用CLI时,不需开启Metastore和HiveServer2服务。
  2. 单机使用Beeline时,则只需开启服务端HiveServer2__服务。
  3. 集群使用Hive时,如果仅提供客户端CLI访问,则只需开启服务端Metastore服务。
  4. 集群使用Hive时,如果仅提供客户端Beeline访问,则只需开启服务端HiveServer2服务。

    优缺点

    | 优点

    | 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手),避免了MapReduce编程,减少了开发人员的学习成本。 | | :—-: | —- | | | 适合处理大规模离线分析计算任务。 | | | 统一的元数据管理,可与其他大数据组件共享(Impala/Spark/Flink) | | | 易扩展集群规模,且Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。 | | 缺点

    | Hql表达能力有限(迭代式算法无法表达,数据挖掘方面不擅长)。 | | | Hive的效率比较低(Hive自动生成的MapReduce作业,通常情况下不够智能化,调优比较困难,粒度较粗)。 | | | 不适用OLTP场景,暂不支持列级别添加、更新、删除。 |

对比传统数据库

比较项 Hive RDBMS
查询语言 HQL SQL
数据存储 HDFS Raw Device or Local FS
数据更新 读多写少(尾写、覆写) DML全面支持
执行引擎 MapReduce Excutor
延迟 高(亚秒级、分钟级) 低(秒级、亚秒级)
处理数据规模
索引 位图索引 复杂索引
事务 不支持 支持
函数 二百左右(内置)、UDF、UDAF、UDTF 数百(内置)、自定义函数、存储过程