Hive(1) Hive介绍以及Hive架构详解

Hive介绍以及Hive架构详解

概念

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能, 是一种大数据离线分析工具

Hive的底层就是将类SQL语句转换成MapReduce

Hive提供了一系列的工具, 可以用来进行数据提取, 转化, 加载(ETL Extract-Transform-Load)



Hive的特点

优点

  • 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)
  • 避免了去写MapReduce,减少开发人员的学习成本
  • Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
  • 可以处理海量数据

缺点

  • 因为Hive底层是MapReduce, 所以执行延迟比较高, 无法提供实时查询, 而且不支持流式数据
  • 不支持行级别的增删改
  • 迭代算法无法表达
  • Hive优化比较困难


数据库和数据仓库对比

数据库 数据仓库
为线上系统提供实时数据 为离线分析存储历史数据
具有完整的增删改查的能力 只支持一次写入多次查询,不支持行级别的增删改
具有完整的事务能力 不强调事务的特性
尽量的避免冗余 提高存储 和处理的效率 人为的制造冗余 提高查询的效率
数据来源单一 数据来源多样
  • OLTP(Online Transaction Processing) 联机事务处理系统

数据库属于OLTP, 涵盖了企业大部分的日常操作,如购物、库存、制造、银行、工资、注册、记账等, 比如Mysql,oracle等关系型数据库

OLTP是面向用户的、用于程序员的事务处理以及客户的查询处理

OLTP系统的访问由于要保证原子性,所以有事务机制和恢复机制

OLTP系统具有较强的事务

  • OLAP(Online Analytical Processing) 联机分析处理系统

主要用于分析数据, Hive, HBase都属于OLAP

OLAP是面向市场的,用于知识工人(经理、主管和数据分析人员)的数据分析

OLAP通常会集成多个异构数据源的数据,数量巨大

OLAP系统一般存储的是历史数据,所以大部分都是只读操作,不需要事务

Hive(1) Hive介绍以及Hive架构详解_第1张图片



Hive架构和执行流程

Hive(1) Hive介绍以及Hive架构详解_第2张图片

Hive架构

  1. Client(客户端)

即用户接口, 其中包括CLI(command-line interface)、JDBC/ODBC(jdbc访问hive)、WEBUI(浏览器访问hive)

  1. Metastore(元数据)

元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等

注意

HIve默认的元数据存储在自带derby数据库中, 但是不推荐使用derby数据库, 可以自定义成MySQL数据库存储

  1. Hadoop

Hive基于HDFS存储, 将类SQL语句翻译成MapReduce在Yarn上运行

  1. Driver(驱动器)

    1. 解析器

      将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。

    2. 编译器

      将AST编译生成逻辑执行计划

    3. 优化器

      对逻辑执行进行优化

    4. 执行器

      把逻辑执行计划转换成可运行的物理计划, 对于Hive来说, 也就是MapReduce或者Spark


Hive执行流程

  1. 用户通过客户端提交一个HQL语句
  2. 通过complier(编译组件) 对HQL语句进行词法和语法分析, 在这一步编译器会分析出HQL语句要操作哪张表
  3. 去元数据获取表信息
  4. complier编译器提交HQL语句分析方案
  5. 执行HQL语句

这里注意,执行器在执行方案时,会进行判断:如果当前方案不涉及到MapReduce组件,比如为表添加分区信息、比如字符串操作等,比如简单的查询操作等,此时就会直接和元数据库交互,然后去HDFS上去找具体数据

如果涉及到计算或者复杂的查询, 就需要将HQL语句转换成MapReduce去执行




你可能感兴趣的:(大数据,#,Hive)