📜  HIVE概述

📅  最后修改于: 2021-10-27 06:51:18             🧑  作者: Mango

从互联网的常规突破开始,许多搜索引擎提供商和电子商务公司/组织每天都在为数据的正常增长而苦苦挣扎。甚至一些社交网站,如 Facebook、Twitter、Instagram 等也遇到同样的问题。今天,许多协会都明白,他们收集的信息是一种有利可图的资产,可用于了解客户、他们在市场上活动的影响、他们的性能和基础设施的有效性等。因此,这就是 Hadoop 作为保护器出现的地方,它提供了我们使用 HDFS(Hadoop 分布式文件系统)处理大量数据集的有效方法,并强加 MapReduce 将计算任务分离成可以分散在硬件集群(商品硬件)周围的单元,提供可扩展性(水平)。
需要解决一些重大挑战,例如:当该框架依赖于关系数据库系统和结构化查询语言 (SQL) 时,如何将现有数据结构移动到 Hadoop?那么数据安全呢,主数据库创建者和管理员,以及一些使用 SQL 从他们的数据仓库中获取信息的普通用户?
这就是 HIVE 的角色出现的地方。 Hive提供了一种称为Hive查询语言(缩写为 HQL)的 SQL 方言来检索或修改数据。它存储在 Hadoop 中。 Apache Hive是一个建立在 Hadoop Cluster 之上的开源数据仓库系统,用于查询和分析存储在 Hadoop 分布式文件系统中的大型数据集。 HiveQL 自动将类似 SQL 的查询转换为 MapReduce 作业。

HIVE的历史——

HIVE 由 Facebook 的数据基础设施团队开发。在 Facebook,Hive 的 Hadoop 集群能够存储超过 2 PB 的原始数据,并且每天处理和加载大约 15 TB 的数据。现在它也被许多公司使用。后来,Apache 基金会接管了Hive并对其进行了进一步开发并使其成为开源软件。它也被其他公司使用和开发,如 Netflix、金融业监管局 (FINRA) 等。

特征 –

Hive是一种基于 SQL 的声明式语言,主要用于数据分析和创建报告。 Hive在集群的服务器端运行。
Hive以更简单的方式提供模式灵活性和演变以及数据汇总、数据查询和分析。
在Hive,我们可以创建两种类型的表——分区表和分桶表,这使得处理存储在 HDFS 中的数据变得可行并提高了性能。
Hive表直接在 Hadoop 文件系统 (HDFS) 中定义。
在Hive,我们有 JDBC/ODBC 驱动程序
Hive快速且可扩展,并且易于学习。
Hive有一个基于规则的优化器来优化计划。
使用Hive,我们还可以执行临时查询来分析数据。

HIVE架构——

  • METASTORE –用于存储表模式、创建时间、位置等的元数据。它还提供元数据分区,以帮助驱动程序跟踪分布在集群上的各种数据集的进度。元数据可帮助驾驶员跟踪数据,这一点至关重要。因此,备份服务器会定期复制可以在数据丢失的情况下检索的数据。
  • 驱动程序 –它充当控制器。驱动程序通过创建会话来启动语句的执行,并监控生命周期和执行进度。它还存储在执行 HQL 查询期间生成的元数据。
  • 编译器 –用于编译Hive查询,将查询转换为执行计划。该计划包含 Hadoop MapReduce 需要执行的任务和步骤,以获取查询转换的输出。
  • OPTIMIZER –它优化并执行执行计划的转换,以获得缩写为 DAG 的优化有向无环图。转换,例如将连接管道转换为单个连接,以及拆分任务,例如在缩减操作之前对数据应用转换,以提供更好的性能和可扩展性。
  • EXECUTOR –它在编译和优化完成后执行任务。它与 Hadoop 的作业跟踪器交互以安排要运行的任务。它通过确保只有在运行所有其他先决条件时才会执行具有依赖关系的任务来处理任务的流水线。

CLI、UI 和 Thrift Server – 用于为外部用户提供用户界面,以便通过编写查询、指令和监控流程与Hive进行交互。 Thrift 服务器允许外部客户端通过网络与Hive交互,类似于 JDBC 或 ODBC 协议。

在职的 –

  1. 首先,用户提交他们的查询,CLI 将该查询发送给驱动程序。
  2. 然后驱动程序借助查询编译器来检查语法。
  3. 然后编译器通过向 Metastore 发送元数据请求来请求元数据。
  4. 响应该请求,Metastore 将元数据发送给编译器。
  5. 然后编译器在检查需求后将计划重新发送给驱动程序。
  6. 驱动程序将计划发送到执行引擎。
  7. 执行引擎将作业发送到作业跟踪器并将作业分配给任务跟踪器。在这里,查询执行 MapReduce 作业。同时执行引擎通过 Metastore 执行元数据操作。
  8. 然后执行引擎从数据节点获取结果并将这些结果发送给驱动程序。
  9. 最后,驱动程序将结果发送到 hive 接口。

HIVE Metastore –

Hive Metastore 是元数据的中央存储库。它存储Hive表的元数据(如它们的架构和位置)和关系数据库中的分区。它通过使用 Metastore 服务 API 为客户端提供对这些信息的访问。
模式:

  • 嵌入式:默认情况下,在Hive,Metastore 服务和 hive 服务运行在同一个 JVM 中。在这种模式下,本地文件系统中的数据使用嵌入式 derby 数据库存储。
  • 本地: Hive是一个基于 SQL 的框架,应该有多个会话。在本地模式下,允许多个Hive会话。这可以通过使用在单独的 JVM 中运行的任何 JDBC 应用程序(如 MySQL)来实现。
  • 远程:在这种模式下,Metastore 和 hive 服务在单独的 JVM 中运行。不同的进程使用 Thrift 网络 API 在它们之间进行通信。

    HIVE API
    Hive API 面向希望将其应用程序和框架与Hive生态系统集成的开发人员。以下是一些 API——

    1. HCatalog CLI(基于命令)——它是一个基于查询的 API,这意味着它只允许执行和提交 HQL。
    2. Metastore (Java) –它是一个基于 Thrift 的 API,由 IMetaStoreClient 接口使用Java。此 API 将 Metastore 存储层与Hive Internals 分离。
    3. 流数据摄取 (Java) –用于使用Hive 的ACID 属性将连续流数据写入事务表。
    4. Streaming Mutation (Java) –它用于更新、插入、删除等转换操作,并使用 ACID 属性将其转换为事务表。
    5. Hive-JDBC (JDBC) –用于支持Hive的 JDBC 功能。

    限制 –
    Apache Hive也有一些限制:

    1. 允许只读视图,但不允许物化视图。
    2. 它不支持触发器。
    3. Apache Hive查询具有非常高的延迟。
    4. NULL 和 null 值之间没有区别。

    HIVE 与 RDBMS 有何不同?

    1. RDBMS 支持写入模式,而Hive提供读取模式。
    2. 在Hive,我们可以编写一次,但在 RDBMS 中,我们可以根据需要编写多次。
    3. Hive可以处理大数据集,而 RDBMS 不能处理超过 10TB 的数据集。
    4. Hive具有高度的可扩展性,但 RDBMS 中的可扩展性会造成损失。
    5. Hive具有 RDBMS 中没有的 Bucketing 功能。