Hive基本概念

1.什么是Hive

Hive由Facebook开源,用于解决海量结构化日志的数据统计问题。Hive是Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。其本至就是将HQL转化成MapReduce程序。

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

2.Hive的优缺点

  • 优点

    • 操作接口采用类SQL语法,简单易上手,提供快速开发的能力。
    • 避免了写MapReduce,减少开发成本
    • Hive执行延迟较高,使用于大数据的数据分析场景
  • 缺点

    • Hive的HQL表达能力有限,迭代式算法无法表达,数据挖掘不擅长。
    • Hive自动生成的MapReduce作业通常不够智能,调优比较困难,因此Hive效率会比较低

3.Hive的架构

  • 用户接口:Client
    CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)

  • 元数据:MetaStoreS
    元数据包括:表名、表所属数据库、表得拥有者、列/分区字段、表的类型、表得数据所在目录等;

  • Hadoop
    使用HDFS进行存储,使用MapReduce进行计算。

  • 驱动器:Driver

    • 解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,一般由第三方工具库完成,如antlr;对AST进行语法分析,如表是否存在、SQL语义是否有误等。
    • 编译器(Physical Plan):将AST编译生成逻辑执行计划。
    • 优化器(Query Optimizer):对逻辑执行计划进行优化。
    • 执行器(Execution):把逻辑执行计划转化成可运行的物理计划,对于Hive来说,就是MR/Spark。
  • 运行机制
    Hive通过用户提供的一系列交互接口,接收用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,再返回结果。

4.Hive与数据库的对比

  • 设计理念
    由于Hive采用了类似SQL的查询语言HQL(Hive Query Language),很容易将Hive理解成数据库。但实际从结构上来说,两者除了类似的查询语言,就再无类似之处了。数据库可以用在在线的应用中,而Hive是为数据仓库而设计的。

  • 数据更新
    Hive主要是针对数据仓库应用设计的,数据仓库的内容通常是读多写少的,因此,Hive不建议对数据进行改写。而数据库中通常需要对数据进行修改。

  • 索引
    Hive在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描,因此没有对数据中的某些key建立索引。Hive需要访问数据中满足条件的特定值时,需要暴力扫描所有的数据,故其访问延迟较高。由于MapReduce的引入,Hive可以并行访问数据,因此即时没有索引,对于大数据量的访问,Hive仍然可以体现出优势。而在数据库中,通常会对一些列建立索引,因此对少量特定条件数据的访问,数据库具有很高的效率与较低的延迟。

  • 执行
    Hive中,大多数的查询都是通过Hadoop中的MapReduce来实现的。而数据库通常有自己的引擎。

posted @ 2020-10-18 17:41  orz_cc  阅读(176)  评论(0编辑  收藏  举报