Hive介绍

最初 Hive 是由 Facebook 开发的,主要用于查询Hadoop集群当中的数据。后来 Apache 软件基金会接受了它,并以 Apache Hive 的名义将其进一步开发为开源,被大家所熟悉和使用,做为一个数据仓库基础设施工具。

因为,从Hadoop教程中,我们了解到想在Hadoop集群上简单的获取数据,都需要利用Hadoop api编写一段程序,才能够获取到想要的数据。这是需要一个有经验的java开发人员,因此引入Hive的目的就是想像操作关系型数据库一样,通过简单SQL语句来获取数据结果。

Hive不仅提供了一个熟悉SQL的用户所能熟悉的编程模型, 还消除了大量的通用代码,甚至是那些有时是不得不使用Java编写的令人棘手的代码。 这就是为什么Hive对于Hadoop是如此重要的原因,无论用户是DBA还是Java开发 工程师。Hive可以让你花费相当少的精力就可以完成大量的工作。


Hive的特点

  • 它将模式存储在数据库中并将处理后的数据存储到 HDFS 中。

  • 它是为 OLAP 设计的。

  • 它提供用于查询的 SQL 类型语言,称为 HiveQL 或 HQL。

  • 它熟悉、快速、可扩展和可扩展。


Hive体系结构:

Hive体系结构:

从上图可以看出HIve主要有3个核心部分组成:

  • 1、hive客户端(hive clients)

  • 2、hive服务(hive services)

  • 3、hive存储和计算(hive storage and compute)


hive客户端:

hive客户端是提供hive服务与外界交互的驱动程序,外界想和hive进行交互,都得通过hive客户端。比如:

  • 对于基于 Thrift 的应用程序,它将提供 Thrift 客户端进行通信。

  • 对于Java相关的应用程序,它提供了 JDBC 驱动程序。

  • 对于其它应用程序,还提供了ODBC的驱动程序。

  • 这些客户端和驱动程序又在 Hive 服务中再次与 Hive 服务器进行通信。

hive服务:

客户端与 Hive 的交互可以通过 Hive 服务执行。如果客户端想要在 Hive 中执行任何与查询相关的操作,它必须通过 Hive 服务进行通信。

所有驱动程序都与 Hive 服务器和 Hive 服务中的主驱动程序通信,如上图所示。

Hive 服务中的驱动程序代表主驱动程序,它与所有类型的 JDBC、ODBC 和其他客户端特定应用程序进行通信。驱动程序将处理来自不同应用程序到元存储和Hadoop集群的请求。

hive存储和计算:

Meta 存储、文件系统、Job Client 等 Hive 服务依次与 Hive 存储通信并执行以下操作

  • 在 Hive 中创建的表的元数据信息是存储在 Hive元存储数据库当中中。

  • 查询结果和加载到表中的数据将存储在Hadoop分布式集群上。


Hive查询的执行流程

Hive查询的执行流程

从上图,我们详细讲解一下Hive中一个查询操作的数据流程:

  • 1、用户执行hive查询,从用户界面。

  • 2、驱动程序(driver)与编译器(Compiler )进行交互,根据用户查询语句获取执行计划,以及流程当中需要的相关元数据信息。

  • 3、然后,编译器为要执行的计划,从元数据存储(meta store)那里获取元数据请求。

  • 4、元数据存储返回信息给编译器。

  • 5、编译器和驱动程序通信,返回执行查询的计划。

  • 6、驱动程序把执行计划发送到执行引擎进行执行。

  • 7、执行引擎(execution engine)根据执行计划,从Hadoop集群获取数据。这里元数据再次充当了Hive表和Hadoop之间的桥梁。让Hadoop知道从哪里获取数据。

  • 8、从驱动程序获取结果。

  • 9、一旦从数据节点获取结果到执行引擎,它就会将结果发送回驱动程序和 UI(前端)。