数据仓库工具Hive概念

Hive的产生背景及概念

Hive的产生背景

  1. 在Hadoop中直接使用MapReduce处理大数据的开发难度大,因为需要针对每一个不同的业务场景开发出一套适用MR程序,并且使用MapReduce框架开发,项目周期长,成本高
  2. 使用Hadoop框架开发时,Hdfs文件没有字段名、没有数据类型,不方便进行数据的有效管理

Hive的概念

  1. Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表(类似于RDBMS中的表),并提供类SQL查询功能。Hive是由Facebook开源,用于解决海量结构化日志的数据统计。
  2. Hive本质是:
    1. 将 SQL 转换为 MapReduce 的任务进行运算—将 SQL 转换为 MapReduce 任务的工具。
    2. Hive的底层依然是使用HDFS进行数据存储

Hive将SQL转换为MR任务的过程

  1. Hive 通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的 Driver, 结合元数据(MetaStore),将这些指令翻译成 MapReduce,提交到 Hadoop 中执行,最后,将 执行返回的结果输出到用户交互接口。在这里插入图片描述
  2. Hive 处理的数据存储在 HDFS
  3. Hive 分析数据底层的实现是 MapReduce
  4. Hive 执行程序运行在 Yarn 上

数据仓库的概念

  1. 数据仓库(Data Warehouse)是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,主要用于管理决策。
  2. 数据仓库的目的:构建面向分析的、集成的数据集合;为企业提供决策支持,并且数据仓库本身不产生数据,数据来源于外部数据。
  3. 数据仓库存储了大量数据,可以使用Hive对数据进行分析和处理。

Hive与RDBMS区别

  1. Hive 采用了类似SQL 的查询语言 HQL(Hive Query Language),但是Hive不是数据库。
  2. 从结构上来看,Hive 和传统的关系数据库除了拥有类似的查询语言,再无类似之处。

Hive与RDBMS区别点

  1. Hive与RDBMS查询语言相似:由于SQL被广泛的应用在数据仓库中,因此,专门针对Hive的特性设计了类SQL的查询语言HQL。

  2. 在数据规模上:Hive存储海量数据;RDBMS只能处理有限的数据集;

    1. Hive建立在集群上并可以利用MapReduce进行并行计算,可以支持很大规模的数据;
    2. RDBMS可以支持的数据规模较小
  3. 在执行引擎上:Hive的引擎是MR/Tez/Spark/Flink,RDBMS使用自己的执行引擎

    1. Hive中大多数查询的执行是通过 Hadoop 提供的 MapReduce 来实现的。
    2. RDBMS通常有自己的执行引擎。
  4. 在数据存储上:Hive 的数据都是存储在 HDFS 中的。RDBMS是将数据保存在本地文件系统中。

  5. 在执行速度。Hive相对慢(MR/数据量);RDBMS相对快

    1. Hive存储的数据量大,在查询数据的时候,通常没有索引,需要扫描整个表;其次,Hive 执行延迟高的因素是 MapReduce 框架。由于 MapReduce 本身具有较高的延迟,因此 在利用 MapReduce 执行 Hive 查询时,也会有较高的延迟
    2. RDBMS对数据的访问通常是基于索引的,执行延迟较低。当然这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive的并行计算显然能体现出并行的优势。
  6. 在可扩展性上。Hive支持水平扩展;通常RDBMS支持垂直扩展,对水平扩展不友好

    1. Hive建立在Hadoop之上,其可扩展性与Hadoop的可扩展性是一致的(Hadoop集群规模可以轻松超过1000个节点)。
    2. RDBMS由于 ACID 语义的严格限制,扩展行非常有限。目前最先进的并行数据库 Oracle 在理论上的扩展能力也只有100台左右。
  7. 在数据更新上:Hive对数据更新不友好;RDBMS支持频繁、快速数据更新

    1. Hive是针对数据仓库应用设计的,数据仓库的内容是读多写少的。因此,Hive中不建议对数据的改写,所有的数据都是在加载的时候确定好的
    2. RDBMS中的数据需要频繁修改,因此可以使用 INSERT INTO … VALUES 添加数据,使用 UPDATE … SET 修 改数据。

Hive的优缺点

Hive的优点

  1. Hive提供了类似SQL的查询语言,上手简单,学习成本低。
  2. Hive能处理海量数据时,底层执行的是MapReduce 任务,避免了去写 MapReduce程序,减少开发难度。
  3. 系统可以水平扩展。底层基于Hadoop,与Hadoop一样可以扩展。
  4. 功能可以扩展。Hive 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
  5. 良好的容错性。某个节点发生故障,HQL仍然可以正常完成;
  6. 统一的元数据管理。元数据包括:有哪些表、表有什么字段、字段是什么类型

Hive的缺点

  1. Hive 优势在于处理大数据,对于处理小数据没有优势,因为 Hive 的执行延迟比较高,因此 Hive 常用于数据分析,对实时性要求不高的场合。
  2. Hive 的 HQL 表达能力有限,迭代式算法无法表达,由于 MapReduce 数据处理流程的限制,效率更高的算法却无法实现。
  3. Hive 的效率比较低(基于MR的执行引擎),调优困难;
    1. Hive 自动生成的 MapReduce 作业,通常情况下不够智能化

Hive架构

在这里插入图片描述

  1. **用户接口 CLI(Common Line Interface) **:Hive的命令行,用于接收HQL,并返回结果; JDBC/ODBC:是指Hive的java实现,与传统数据库JDBC类似;WebUI:是指可通过浏览器访问Hive;
  2. 元数据管理(MetaStore): Hive将元数据存储在关系数据库中(如mysql、derby)。Hive的元数据包括:数据库名、表名及类型、字段名称及数据类型、数据所在位置等;
    1. Hive元数据默认存储在自带的derby 数据库中
  3. 驱动程序(Driver)
    1. 解析器 (SQLParser) :使用第三方工具(antlr)将HQL字符串转换成抽象语法树(AST);对AST进行语法分析,比如字段是否存在、SQL语义是否有误、表是否存在;
    2. 编译器 (Compiler) :将抽象语法树编译生成逻辑执行计划;
    3. 优化器 (Optimizer) :对逻辑执行计划进行优化,减少不必要的列、使用分区等;
    4. 执行器 (Executr) :把逻辑执行计划转换成可以运行的物理计划;
  4. Hadoop:Hive使用 HDFS 进行存储,使用 MapReduce 进行计算。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值