Hive - 介绍


“大数据”一词用于包含巨大数据量,高速度以及日益增多的各种数据的大型数据集。使用传统的数据管理系统,处理大数据很困难。因此,Apache Software Foundation引入了一个名为Hadoop的框架来解决大数据管理和处理难题。

Hadoop的

Hadoop是一个开源框架,用于在分布式环境中存储和处理大数据。它包含两个模块,一个是MapReduce,另一个是Hadoop分布式文件系统(HDFS)。

  • MapReduce: 这是一个并行编程模型,用于在大型商用硬件集群上处理大量结构化,半结构化和非结构化数据。

  • HDFS: Hadoop分布式文件系统是Hadoop框架的一部分,用于存储和处理数据集。 它提供了一个容错文件系统在商品硬件上运行。

Hadoop生态系统包含不同的子项目(工具),例如用于帮助Hadoop模块的Sqoop,Pig和Hive。

  • Sqoop: 它用于在HDFS和RDBMS之间导入和导出数据。

  • Pig: 这是一个用于为MapReduce操作开发脚本的过程语言平台。

  • Hive: 它是一个用来开发SQL类型脚本来执行MapReduce操作的平台。

注意: 有多种方法可以执行MapReduce操作:

  • 使用Java MapReduce程序的传统方法用于结构化,半结构化和非结构化数据。
  • MapReduce使用Pig处理结构化和半结构化数据的脚本方法。
  • Hive查询语言(HiveQL或HQL)用于MapReduce使用Hive处理结构化数据。

什么是Hive

Hive是一个数据仓库基础设施工具,用于处理Hadoop中的结构化数据。它位于Hadoop的顶部,用于汇总大数据,并使查询和分析变得轻松。

最初,Hive是由Facebook开发的,随后Apache软件基金会接手并开发了Apache Hive名下的开源软件。它被不同的公司使用。例如,Amazon在Amazon Elastic MapReduce中使用它。

Hive不是

  • 关系数据库
  • OnLine事务处理(OLTP)的设计
  • 用于实时查询和行级更新的语言

Hive的特点

  • 它将模式存储在数据库中并将数据处理成HDFS。
  • 它是为OLAP设计的。
  • 它提供用于查询的SQL类型语言,称为HiveQL或HQL。
  • 它是熟悉的,快速的,可扩展的和可扩展的。

Hive体系结构

以下组件图描述了Hive的体系结构:

Hive体系结构

该组件图包含不同的单位。下表描述了每个单元:

单元名称 操作
用户界面 Hive是一个数据仓库基础设施软件,可以创建用户和HDFS之间的交互。Hive支持的用户界面是Hive Web UI,Hive命令行和Hive HD Insight(在Windows服务器中)。
Meta Store Hive选择相应的数据库服务器来存储表,数据库,列的架构或元数据,表格,数据类型和HDFS映射。
HiveQL流程引擎 HiveQL与用于查询Metastore上的模式信息的SQL类似。它是MapReduce程序的传统方法的替代之一。我们可以编写MapReduce作业查询并处理它,而不用Java编写MapReduce程序。
执行引擎 HiveQL进程引擎和MapReduce的结合部分是Hive执行引擎。执行引擎处理查询并生成与MapReduce结果相同的结果。它使用MapReduce的风格。
HDFS或HBASE Hadoop分布式文件系统或HBASE是将数据存储到文件系统的数据存储技术。

Hive的工作

下图描述了Hive和Hadoop之间的工作流程。

Hive如何工作

下表定义了Hive如何与Hadoop框架交互:

步骤号 操作
1 **执行查询** Hive接口(如命令行或Web UI)向Driver(任何数据库驱动程序,如JDBC,ODBC等)发送查询以执行。
2 **获取计划** 驱动程序在查询编译器的帮助下解析查询以检查语法和查询计划或查询的要求。
3 **获取元数据** 编译器将元数据请求发送到Metastore(任何数据库)。
4 **发送元数据** Metastore将元数据作为响应发送给编译器。
5 **发送计划** 编译器检查需求并将计划重新发送给驱动程序。到此为止,查询的解析和编译已完成。
6 **执行计划** 驱动程序将执行计划发送给执行引擎。
7 **执行作业** 在内部,执行作业的过程是一个MapReduce作业。执行引擎将作业发送到名称节点中的JobTracker,并将该作业分配给数据节点中的TaskTracker。在这里,查询执行MapReduce作业。
7.1 **元数据操作** 同时在执行时,执行引擎可以使用Metastore执行元数据操作。
8 **取结果** 执行引擎从Data节点接收结果。
9 **发送结果** 执行引擎将这些结果值发送给驱动程序。
10 **发送结果** 驱动程序将结果发送给Hive Interfaces。