Hive简介

来源:互联网 发布:怎样申请淘宝企业店铺 编辑:程序博客网 时间:2024/06/06 06:34

简介

本文介绍了Hive的起源,基本的功能特性,应用场景,并对Hive主要服务进行介绍,通过阅读本文,读者可以对Hive有基本的了解。

Hive是什么

Hive是一个构建在Hadoop上的数据仓库框架,是应Facebook每天产生的海量新兴社会网络数据进行管理和学习的需求而产生和发展起来的。Hive的设计目的是让精通SQL技能的分析师能够对Facebook存放在HDFS中的大规模数据集执行查询。
Hive提供了一个被称为Hive查询语言的SQL方言,用来查询存储在Hadoop集群中的数据。Hive可以将大多数的查询转换为MapReduce任务(job),进而在介绍一个令人熟悉的SQL抽象的同时,拓宽Hadoop的可扩展性。
Hive不是一个完整的数据库, Hadoop以及HDFS的设计本身约束和局限性地限制了Hive所能胜任的工作。其中最大的限制就是Hive不支持记录级别的更新、插入或者删除操作。但是用户可以通过查询生成新表或者将查询结果导人到文件中。同时,因为Hadoop是一个面向批处理的系统,而MapReduce任务(job)的启动过程需要消耗较长的时间,所以Hive查询延时比较严重。传统数据库中在秒级别可以完成的查询,在Hive中,即使数据集相对较小,往往也需要执行更长的时间。最后需要说明的是,Hive不支持事务。
因此,Hive不支持OLTP(联机事务处理)所需的关键功能,而更接近成为一个OLAP(联机分析技术)工具。但是我们将会看到,由于Hadoop本身的时间开销很大,并且Hadoop所被设计用来处理的数据规模非常大,因此提交查询和返回结果是可能具有非常大的延时的,所以Hive并没有满足OLAP中的“联机”部分,至少目前并没有满足。如果用户需要对大规模数据使用OLTP功能的语,那么应该选择使用一个NoSQL数据库,如和Hadoop结合使用的HBase。
因此,Hive是最适合数据仓库应用程序的,其可以维护海量数据,而且可以对数据进行挖掘,然后形成意见和报告等。

使用Hive好处

因为大多数的数据仓库应用程序是使用基于SQL的关系型数据库实现的,所以Hive降低了将这些应用程序移植到Hadoop上的障碍。用户如果懂得SQL,那么学习使用Hive将会很容易。如果没有Hive,那么这些用户就需要去重新学习新的语言和新的工具后才能进行开发。
同样地,相对于其他Hadoop语言和工具来说,Hive也使得开发者将基于SQL的应用程序移植到Hadoop变得更加容易。

Hive服务

Hive发行版中附带的模块有CLI,一个称为Hive网页界面(HWI)的简单网页界面以及可通过JDBC、ODBC和一个Thrift服务器进行编程访问模块。这里列出一些最有用的服务:

  ● cli:Hive的命令行接口(外壳环境)。这是默认的服务。
  ● hive thrift server:让Hive以提供Thrift服务的服务器形式运行,允许用不同语言编写的客户端进行访问。使用Thrift、JDBC和ODBC连接器的客户端需要运行Hive服务器来和Hive进行通信。通过设置HIVE_PORT环境变量来指明服务器所监听的端口号(默认为10000)。
  ● HWI:Hive的Web接口。
  ● metastore:Metastore(元数据存储)是一个独立的关系型数据库(通常是一个MySQL实例),Hive会在其中保存表模式和其他系统元数据。默认情况下,metastore和Hive服务运行在同一个进程里。使用这个服务,可以让metastore作为-个单独的(远程)进程运行。通过设置METASTORE_PORT环境变量可以指定服务器监听的端口号。
  ● Thrift client:Thrift客户端简化了在多种编程语言中运行Hive命令,绑定支持C++, Java, PHP, Python和Ruby。
  ● JDBC驱动:Hive提供了JDBC驱动
  ● ODBC驱动:允许支持ODBC协议的应用程序连接到Hive
所有的命令和查询都会进入到Driver(驱动模块),通过该模块对输入进行解析编译,对需求的计算进行优化,然后按照指定的步骤执行(通常是启动多个MapReduce任务来执行)。当需要启动MapReduce任务(job)时,Hive本身是不会生MapReduce算法程序的。相反,Hive通过一个表示“job执行计划”的XML文件驱动执行内置的、原生的Mapper和Reducer模块。换句话说,这些通用的模块函数类似于微型的语言翻译程序,而这个驱动计算的“语言”是以XML形式编码的。

Hive通过和JobTracker通信来初始化MapReduce任务(job),而不必部署在JobTracker所存的管理节点上执行。在大型集群中,通常会有服务器专门用干部署像Hive这样的工具。而这些服务器可远程和管理节点上的JobTracker通信来执行任务(job)。通常,要处理的数据文件是存储在HDFS中的,而HDFS是由NameNode进行管理的。

参考资料

1. Hadoop权威指南 第3版
2. Hive编程指南

原创粉丝点击