Hive不仅提供了一个熟悉SQL的用户所能熟悉的编程模型,还消除了大量的通用代码,甚至是哪些有时是不得不使用Java编写的令人棘手的代码。
Hive发行版中附带的模块有CLI,一个称为Hive网页界面(HWI)的简单 网页界面,以及可通过JDBC、ODBC和一个Thrift服务器进行编程访问的几个模块。
所有的命令和查询都会进入到Driver(驱动模块)、通过该模块对输入进行编译,对需求的计算进行优化,然后按照指定的步骤执行(通常是启动多个MapReduce任务(job)来执行)。当需要启动MapReduce任务(job)时,Hive本身是不会生成Java MapReduce算法程序的。相反,Hive通过一个表示“job执行计划”的XML文件驱动执行内置的、原生的Mapper和Reducer模块。换句话说,这些通用的模块函数类似于微型的语言翻译程序,而这个驱动计算的“语言”是以XML形式编写的。
Hive通过和JobTracker通信来初始化MapReduce任务(job),而不必部署在JobTracker所在的管理节点上执行。在大型集群中,通常会有网关机专门用于部署像Hive这样的工具。在这些网关机上可远程和管理节点上的JobTracker通信来执行任务(job)。通常,要处理的数据文件是存储在HDFS中的,而HDFS是由NameNode进行管理的。
Metastore(元数据存储)是一个独立的关系型数据库(通常是一个MySQL实例),Hive会在其中保存表模式和其他系统元数据。
Hive最适合于数据仓库程序,对于数据仓库程序不需要实时响应查询,不需要记录级别的插入、更新和删除。当然,Hive也非常适合于一定SQL知识的用户。
在$HIVE_HOME/lib目录下可以发现有众多的JAR(Java压缩宝)文件,例如hive-exec*.jar和hive-metastore*.jar。每个JAR文件都实现了Hive功能中某个特定的部分。
$HIVE_HOME/bin目录下包含可以执行各种各样Hive服务的可执行文件,包括hive命令行界面(也就是CLI)。CLI是我们使用Hive的最常用方式。CLI可用于提供交互式的界面供输入语句或者可以供用户执行含有Hive语句的“脚本”。
Hive还有一些其他组件。Thrift服务提供了可远程访问其他进程的功能,也提供使用JDBC和ODBC访问Hive的功能。这些都是基于Thrift服务实现的。
所有的Hive客户端都需要一个metastore(元数据服务),Hive使用这个服务来存储表模式信息和其他元数据信息。通常情况下,会使用一个关系型数据库中的表来存储这些信息。默认情况下,Hive会使用内置的Derby SQL服务器,其可以提供有限的、单进程的存储服务。最后,Hive还提供了一个简单的网页界面,也就是Hive网页界面(HWI),提供了远程访问Hive的服务。
$HIVE_HOME/conf目录下存放了配置Hive的配置文件。Hive具有非常多的配置属性,这些属性控制的功能包括元数据存储(如数据存放在哪里)、各种各样的优化和“安全控制”,等等。