Hive大数据存储与处理
上QQ阅读APP看书,第一时间看更新

1.2.2 Hive的架构

Hadoop生态圈包含若干用于协助Hadoop的不同的子项目(工具)模块,如Sqoop、Pig和Hive。模块的主要用途如下。

(1)Sqoop:用于在HDFS和关系数据库之间导入和导出数据。

(2)Pig:用于开发MapReduce作业的程序语言的工具,通过将PigLatin脚本编译成MapReduce任务来实现数据处理和计算。

(3)Hive:用于开发SQL类型脚本进行MapReduce作业的工具,通过将HQL转换为MapReduce任务来实现数据处理。

同时在Hadoop生态圈中,有多种方法可以执行MapReduce作业。传统的方法是使用Java MapReduce程序处理结构化数据、半结构化数据和非结构化数据。更适用于数据流处理,如数据清洗、ETL(抽取、转换、加载)等。Hive适用于需要使用SQL处理大规模数据集的场景,因为Hive的语法类似于SQL,所以大多数传统的数据分析人员可以很快上手。

Hive定义了简单的类SQL,允许熟悉SQL的用户查询数据。同时,HQL允许熟悉MapReduce的开发者开发自定义的Mapper和Reducer处理内建的Mapper和Reducer无法完成的复杂的分析工作。

Hive的架构如图1-2所示。

图1-2 Hive的架构

Hive包含的主要组件的简要说明如下。

1.访问接口

Hive提供了3种访问接口:命令行接口(Command Line Interface,CLI),Hive Web接口(Hive Web Interface,HWI)以及ThriftServer。具体介绍如下。

(1)CLI

CLI是基础的访问接口,使用“hive”命令访问。CLI启动时会同时启动一个Hive副本,相当于执行“ hive-service cli”命令。启动CLI只需要在命令行中执行“$HIVE_HOME/bin/hive”命令即可。在命令行状态中执行“hive-H”可以查看CLI选项。

(2)HWI

HWI是Hive CLI的Web接入方式。HWI的特点是相对于CLI界面友好,适合不太熟悉Linux命令行操作的数据分析人员。通过浏览器打开“http://主机IP地址:9999/hwi/”网址可访问Hive服务,HWI的默认端口为9999。

(3)ThriftServer

ThriftServer提供客户端通过JDBC(Java Database Connectivity,Java数据库互连)和ODBC(Open Database Connectivity,开放数据库互连)接入数据库的能力,用于进行可扩展跨语言服务的开发。Hive集成了该服务,可以通过不同的编程语言调用Hive的接口。对于Java程序,Hive提供了JDBC驱动;对于其他应用程序,Hive提供了ODBC驱动。

2.元数据存储服务

元数据服务(Metadata)又称中介数据,是描述数据的数据,主要是描述数据的属性信息,用来支持指示存储位置等功能。Hive的元数据存储在关系数据库里,Hive支持的关系数据库有Derby、MySQL等。

Hive中的数据分为两部分,一部分是真实数据,一般存储在HDFS中;另一部分是真实数据的元数据,单独存储在关系数据库(如Derby、MySQL等)中。元数据包含Hive中的数据库、表、表模式、目录、分区、索引以及命名空间等信息,是对真实数据的描述。元数据会不断更新变化,所以不适合存储在HDFS中。实现任何对Hive真实数据的访问均需要先访问元数据。元数据对于Hive十分重要,因此Hive把元数据存储(Metastore)服务独立出来,从而防止Hive服务和Metastore服务耦合,以保证Hive的健壮性。

在默认情况下,Hive会使用内置的Derby数据库,其只提供有限的单进程存储服务,在这种情况下,Hive不能执行两个并发的Hive CLI实例,Derby数据库通常被应用于开发、测试环境中。对于生产环境,需要使用MySQL关系数据库。

3.Driver

Driver是Hive的核心组件。Driver包括的组件及其说明如表1-2所示。

表1-2 Driver包括的组件及其说明

由表1-2可得,Driver的主要功能是将用户编写的HQL语句进行解析、编译、优化,生成逻辑执行计划,并提交给Hadoop集群进行处理。