数据仓库工具——Hive概念篇

Posted 小企鹅推雪球!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据仓库工具——Hive概念篇相关的知识,希望对你有一定的参考价值。

文章目录

Hive产生背景

  1. 在Hadoop中直接使用MapReduce处理大数据面临以下几个问题:
    1. MapReduce 开发难度大,学习成本高(本质上还是针对各种业务场景定制化开发,复用率低)
    2. Hdfs文件没有字段名、没有数据类型,不方便进行数据的有效管理
    3. 使用MapReduce框架开发,项目周期长,成本高

什么是Hive

  1. Hive是由Facebook开源,用于解决海量结构化日志的数据统计。
  2. Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表(类似于RDBMS中的表),并提供类SQL查询功能。
  3. Hive本质是:将 SQL 转换为 MapReduce 的任务进行运算——将 SQL 转换为 MapReduce 任务的工具。
  4. Hive 通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的 Driver, 结合元数据(MetaStore),将这些指令翻译成 MapReduce,提交到 Hadoop 中执行,最后,将 执行返回的结果输出到用户交互接口。
  5. Hive 处理的数据存储在 HDFS
  6. Hive 分析数据底层的实现是 MapReduce
  7. Hive 执行程序运行在 Yarn 上

数据仓库概述

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

Hive与RDBMS区别

  1. Hive 采用了类似SQL 的查询语言 HQL(Hive Query Language),但是Hive不是数据库。
  2. Hive从结构上来看,Hive 和传统的关系数据库除了拥有类似的查询语言,再无类似之处。
  3. Hive与RDBMS查询语言相似
    1. 由于SQL被广泛的应用在数据仓库中,因此,专门针对Hive的特性设计了类SQL的查询语言HQL。
  4. 在数据规模上:Hive存储海量数据;RDBMS只能处理有限的数据集;
    1. Hive建立在集群上并可以利用MapReduce进行并行计算,可以支持很大规模的数据;
    2. RDBMS可以支持的数据规模较小
  5. 在执行引擎上:Hive的引擎是MR/Tez/Spark/Flink,RDBMS使用自己的执行引擎
    1. Hive中大多数查询的执行是通过 Hadoop 提供的 MapReduce 来实现的。
    2. RDBMS通常有自己的执行引擎。
  6. 在数据存储上:Hive保存在HDFS上;RDBMS保存在本地文件系统
    1. Hive 的数据都是存储在 HDFS 中的。
    2. RDBMS是将数据保存在本地文件系统中。
  7. 在执行速度。Hive相对慢(MR/数据量);RDBMS相对快
    1. Hive存储的数据量大,在查询数据的时候,通常没有索引,需要扫描整个表;另外一个导 致 Hive 执行延迟高的因素是 MapReduce 框架。由于 MapReduce 本身具有较高的延迟,因此 在利用 MapReduce 执行 Hive 查询时,也会有较高的延迟
    2. RDBMS对数据的访问通常是基于索引的,执行延迟较低。当然这个低是有条件的,即数据规模较小,
    3. 当数据规模大到超过数据库的处理能力的时候,Hive的并行计算显然能体现出并行的优势。
  8. 在可扩展性上。Hive支持水平扩展;通常RDBMS支持垂直扩展,对水平扩展不友好
    1. Hive建立在Hadoop之上,其可扩展性与Hadoop的可扩展性是一致的(Hadoop集群规模可以轻松超过1000个节点)。
    2. RDBMS由于 ACID 语义的严格限制,扩展行非常有限。目前最先进的并行数据库 Oracle 在理论上的扩展能力也只有100台左右。
  9. 在数据更新上:Hive对数据更新不友好;RDBMS支持频繁、快速数据更新
    1. Hive是针对数据仓库应用设计的,数据仓库的内容是读多写少的。因此,Hive中不建议对数据的改写,所有的数据都是在加载的时候确定好的
    2. RDBMS中的数据需要频繁修改,因此可以使用 INSERT INTO … VALUES 添加数据,使用 UPDATE … SET 修 改数据。

Hive的优点

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

Hive的缺点

  1. Hive 的 HQL 表达能力有限
    1. 迭代式算法无法表达
    2. 数据挖掘方面不擅长,由于 MapReduce 数据处理流程的限制,效率更高的算法却无法实现。
  2. Hive 的效率比较低(基于MR的执行引擎)
    1. Hive 自动生成的 MapReduce 作业,通常情况下不够智能化
    2. Hive的调优困难;

Hive架构

  1. 用户接口:Client

    1. CLI(command-line interface)、JDBC/ODBC(jdbc 访问 hive)、WEBUI(浏览器访问 hive)
    2. Hive的命令行,用于接收HQL,并返回结果;JDBC/ODBC:是指Hive的java实现,与传统数据库JDBC类似;WebUI:是指可通过浏览器访问Hive;
  2. 元数据管理:MetaStore

    1. Hive将元数据存储在关系数据库中(如mysql、derby)。
    2. Hive的元数据包括:表名、表所属的数据库(默认是 default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;
    3. Hive元数据默认存储在自带的derby 数据库中
  3. Hadoop:Hive使用 HDFS 进行存储,使用 MapReduce 进行计算。

  4. 驱动器:Driver:

    1. 解析器(SQL Parser):将 SQL 字符串转换成抽象语法树 AST,这一步一般都用第三方工具库完成,比如 antlr;对 AST 进行语法分析,比如表是否存在、字段是否存在、SQL 语义是否有误。
    2. 编译器(Physical Plan):将 AST 编译生成逻辑执行计划。
    3. 优化器(Query Optimizer):对逻辑执行计划进行优化,减少不必要的列、使用分区等;
    4. 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于 Hive 来说,就是 MR/Spark。
  5. Thrift Server;Hive可选组件,是一个软件框架服务,允许客户端使用包括Java、C++、Ruby和其他很多种语言,通过 编程的方式远程访问Hive;

  6. 驱动程序(Driver):

    1. 解析器 (SQLParser) :使用第三方工具(antlr)将HQL字符串转换成抽象语法树(AST);对AST进行语法分析,比如字段是否存在、SQL语义是否有误、表是否存在;
    2. 编译器 (Compiler) :将抽象语法树编译生成逻辑执行计划;
    3. 优化器 (Optimizer) :对逻辑执行计划进行优化,
    4. 执行器 (Executr) :把逻辑执行计划转换成可以运行的物理计划;
开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于数据仓库工具——Hive概念篇的主要内容,如果未能解决你的问题,请参考以下文章

大数据面试题锦集 | 数据仓库工具HIVE篇

(第7篇)灵活易用易维护的hadoop数据仓库工具——Hive

Hive -- 原理篇

Hive -- 原理篇

数据仓库工具——Hive表操作

Hive初始