Hive(一):基础知识最全总结

Hive基础

一、基础概念

Hive:facebook实现并开源的Hadoop的一个数据仓库工具,底层数据存储依赖于Hadoop的HDFS分布式文件存储上,将结构化数据映射到一张数据库表中,并提供HQL的查询功能,HQL的本质在于将HQL解析,转换为MapReduce任务进行数据的分析。

概括下:Hive就是基于HDFS进行数据存储,HSQ基于MapReduce任务进行数据分析的Hadoop数据仓库工具。

HQL请求
Hive处理转化为MapReduce
MapReduce任务执行

MapReduce 所面临的问题:

  • 1、人员学习成本太高
  • 2、项目周期要求太短
  • 3、MapReduce实现复杂查询逻辑开发难度太大

为什么要使用 Hive

  • 1、更友好的接口:操作接口采用类 SQL 的语法,提供快速开发的能力
  • 2、更低的学习成本:避免了写 MapReduce,减少开发人员的学习成本
  • 3、更好的扩展性:可*扩展集群规模而无需重启服务,还支持用户自定义函数

二、数据仓库与数据库

  • 数据库:Database (Oracle, Mysql, PostgreSQL)主要用于事务处理(OLTP)
    • 典型代表:常用的关系型数据库(RDBMS):MySQL,Oracle,SqlServer等
  • 数据仓库:Datawarehouse (Amazon Redshift, Hive)主要用于数据分析(OLAP)。
    • 典型代表:AWS Redshift, Greenplum, Hive等

Hive与关系型数据库(RDBMS)对比

数据库 Hive 关系型数据库(RDBMS)
查询语言 HQL SQL
数据存储 HDFS(分布式文件系统) Row Device 或者 Local FS (本地文件系统)
执行器 MapReduce Executor
数据操作 覆盖追加 行级更新删除
数据插入 可批量导入 可单行、可批量导入
处理数据规模
执行延迟
分区 支持 支持
索引 0.8版本加入简单索引 支持复杂索引
扩展性 有限
数据加载模式 读时模式(快) 写时模式(慢)
应用场景 海量数据 实时查询

三、Hive的基本特性

  • 采用批处理方式处理海量数据
    • Hive需要把HiveQL语句转换成MapReduce任务进行运行。
    • 数据仓库存储的是静态数据,对静态数据的分析适合采用批处理方式,不需要快速响应给出结果,而且数据本身也不会频繁变化。
  • 提供适合数据仓库操作的工具
    • Hive本身提供了一系列对数据进行提取、转换、加载(ETL)的工具,可以存储、查询和分析存储在Hadoop中的大规模数据。
    • 这些工具能够很好地满足数据仓库各种应用场景。

四、Hive基础组件

Hive(一):基础知识最全总结

  • 用户接口模块包括CLI、HWI、JDBC、ODBC、Thrift Server。
    • CLI,Shell 终端命令行(Command Line Interface),采用交互形式使用 Hive 命令行与 Hive 进行交互,最常用(学习,调试,生产)
    • JDBC/ODBC,是Hive的基于JDBC操作提供的客户端,用户(开发员,运维人员)通过 这连接至 Hive server 服务。
    • Web UI,通过浏览器访问 Hive。
  • 驱动模块(Driver)包括编译器、优化器、执行器等,负责把HiveSQL语句转换成一系列MapReduce作业。
    Hive的核心是驱动引擎, 驱动引擎由四部分组成:
    • (1) 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)
    • (2) 编译器:编译器是将语法树编译为逻辑执行计划
    • (3) 优化器:优化器是对逻辑执行计划进行优化
    • (4) 执行器:执行器是调用底层的运行框架执行逻辑执行计划
  • 元数据存储模块(Metastore)是一个独立的关系型数据库(自带derby数据库,或MySQL数据库)
    • Hive 中的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和 外部表),表的数据所在目录。
    • Metastore 默认存在自带的Derby数据库中。缺点就是不适合多用户操作,并且数据存储目录不固定。数据库跟着 Hive打开的路径走,极度不方便管理。
    • 解决方案:通常存我们自己创建的MySQL库(本地或远程),Hive 和 MySQL 之间通过 MetaStore 服务交互。

五、Hive的工作原理

① SQL语句转换成MapReduce作业的基本原理

以Join语句和Group by语句为例

  • Join过程

Hive(一):基础知识最全总结

  • Group by过程
    Hive(一):基础知识最全总结

② HQL查询转换成MapReduce作业

Hive(一):基础知识最全总结

  • 第1步:由Hive驱动模块中的编译器对用户输入的SQL语言进行词法和语法解析,将SQL语句转化为抽象语法树的形式。
  • 第2步:抽象语法树的结构仍很复杂,不方便直接翻译为MapReduce算法程序,因此,把抽象语法书转化为查询块。
  • 第3步:把查询块转换成逻辑查询计划,里面包含了许多逻辑操作符。
  • 第4步:重写逻辑查询计划,进行优化,合并多余操作,减少MapReduce任务数量。
  • 第5步:将逻辑操作符转换成需要执行的具体MapReduce任务。
  • 第6步:对生成的MapReduce任务进行优化,生成最终的MapReduce任务执行计划。
  • 第7步:由Hive驱动模块中的执行器,对最终的MapReduce任务进行执行输出。

注意事项

  • 当启动MapReduce程序时,Hive本身是不会生成MapReduce算法程序的,需要通过一个表示“Job执行计划”的XML文件驱动执行内置的、原生的Mapper和Reducer模块
  • Hive通过和JobTracker通信来初始化MapReduce任务,不必直接部署在JobTracker所在的管理节点上执行。
  • 通常在大型集群上,会有专门的网关机来部署Hive工具。网关机的作用主要是远程操作和管理节点上的JobTracker通信来执行任务。
  • 数据文件通常存储在HDFS上,HDFS由名称节点管理。