2.1 Hive简介


2.1.1 什么是Hive


2.1Hive简介 - 图1
Hive是Facebook为了解决海量日志数据的统计分析而开发的基于Hadoop的一个数据仓库工具(后来开 源给了Apache软件基金会),可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功
能.HQL。
本质上:将HQL语句转换为MapReduce任务进行运行(转化流程如下)

2.1Hive简介 - 图2

主要用途:做离线数据分析,比直接用MapReduce 开发效率更高

2.1.2 为什么使用Hive

直接使用Hadoop MapReduce 处理数据面临的问题: 人员学习成本太高
MapReduce 实现复杂查询逻辑开发难度太大
使用Hive:
操作接口采用类SQL语法,提供快速开发的能力

避免了去写MapReduce,减少开发人员的学习成本功能扩展很方便

2.1.3 Hive的优缺点

1) 优点

  1. 操作接口采用类SQL语法,避免了写MapReduce程序,简单易上手,减少开发人员学习成本
    2. 在数据处理方面,Hive语句最终会生成MapReduce任务去计算,常用于离线数据分析,对数据实时 性要求不高的场景
    3. 在数据存储方面,它能够存储很大的数据集,并且对数据完整性、格式要求并不严格
    4. 在延展性方面,Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数

    2) 缺点

  2. Hive的HQL本身表达能力有限,不能够进行迭代式计算,在数据挖掘方面也不擅长
    2. Hive操作默认基于MapReduce引擎,延迟高,不适用于交互式查询,因此智能化程度低,并且基于 SQL调优困难,粒度较粗

    2.1.4 Hive架构


    2.1Hive简介 - 图3
    1. 用户接口:Client CLI(hive shell)、JDBC/ODBC(java 访问 hive)、WEBUI(浏览器访问 hive)
    2. 元数据:Metastore 元数据包括:表名、表所属的数据库(默认是 default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;
    3. Hadoop 使用 HDFS 进行存储,使用 MapReduce 进行计算。
    4. 驱动器:Driver
    (1) 解析器(SQL Parser):将 SQL 字符串转换成抽象语法树 AST,这一步一般都用第三方工具库完成,比如 antlr;对 AST 进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
    (2) 编译器(Physical Plan):将 AST 编译生成逻辑执行计划。
    (3) 优化器(Query Optimizer):对逻辑执行计划进行优化。

(4) 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于 Hive 来说,就是
MR/Spark。
Hive 运行机制如下图:

2.1Hive简介 - 图4

Hive 通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的 Driver,
结合元数据(MetaStore),将这些指令翻译成 MapReduce,提交到 Hadoop 中执行,最后,将执行返回的结果输出到用户交互接口。

2.1.5 Hive与传统数据库对比

Hive 用于海量数据的离线分析。

2.1Hive简介 - 图5
Hive 具有sql数据库的外表,但应用场景完全不同,Hive 只适用于批量数据统计分析。更直观的对比图如下

2.1.6 Hive数据模型

Hive 的数据模型主要有以下四种,如下图所示:

2.1Hive简介 - 图6

2.1.7 Hive安装

Hive 安装前需要安装好JDK和Hadoop,配置好环境变量根据元数据存储介质不同,分为两个版本
内置derby版:
优点:安装配置简单
缺点:不同路径启动Hive,每个Hive拥有一套自己的元数据,无法共享每个目录下都会出现(derby.log 及 metastore_db)
mysql 版:(mysql 进行元数据保存)
缺点: 安装配置复杂
优点: 实现了元数据的共享