3.2.2 Hive在交互式计算中的应用

更新于 2026年10月10日 版权声明
3.2.2 Hive在交互式计算中的应用

图示

Hive是建立在Hadoop之上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取、转化、加载等,它是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了简单的类SQL查询语言,称为Hive Query Language(HQL),用来从存储在Hadoop集群上的数据中查询所需要的信息。Hive方便了熟悉SQL的用户查询数据,同时这个语言也允许熟悉MapReduce开发者开发自己的Mapper和Reducer来处理内建的Mapper和Reducer无法完成的复杂的数据分析处理工作。

基于Hive的MapReduce操作分析的实验过程可通过扫描二维码查看。

1)Hive在Hadoop生态圈中的位置

Hive是一个SQL解析引擎,将SQL转译成MapReduce程序并在Hadoop上运行。Hive对外提供类似于SQL语法的HQL语句数据接口,自动将HQL语句编译转化为MR作业后在Hadoop上执行,从而降低了分析人员使用Hadoop进行数据分析的难度。

图3⁃10体现了Hive在Hadoop生态圈的位置。

可以看出,Hive作为Hadoop的数据仓库处理工具,它所有的数据都存储在Hadoop兼容的文件系统中。

图示

图3⁃10 Hive在Hadoop中的位置

2)Hive特点

Hive在加载数据过程中不会对数据进行任何的修改,只是将数据移动到HDFS中Hive设定的目录下。因此,Hive不支持对数据的改写和添加,所有的数据都是在加载的时候确定的。基于此,Hive具有如下设计特点:

①支持索引,加快数据查询。

②不同的存储类型,例如,纯文本文件、HBase中的文件。

③将元数据保存在关系数据库中,减少了在查询中执行语义检查时间。

④可以直接使用存储在Hadoop文件系统中的数据。

⑤内置大量用户函数UDF来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF。

⑥由自定义函数来完成内置函数无法实现的操作。

⑦类SQL的查询方式,将SQL查询转换为MapReduce作业(job)在Hadoop集群上执行,也可以将SQL转换成Spark、Tez等计算框架可执行的代码,并将计算任务最终由这些计算框架来完成。

⑧编码时和Hadoop一样,都使用UTF⁃8字符集。

3)Hive体系结构

图3⁃11为Hive的体系结构。可见,它是一种建立在Hadoop基础上的用户交互接口,其底层存储仍然是Hadoop的HDFS,计算框架还调用了Hadoop的MapReduce。通过HQL可以让用户方便访问Hadoop数据,不需要用户编写复杂的MapReduce程序。

(1)用户接口

CLI:命令行界面,CLI启动的时候,会同时启动一个Hive副本。

JDBC客户端:封装了Thrift和Java应用程序,可以通过指定的主机和端口连接到在另一个进程中运行的Hive服务器。

ODBC客户端:ODBC驱动允许支持ODBC协议的应用程序连接到Hive。

Web接口:可以通过浏览器访问Hive。

图示

图3⁃11 Hive体系结构

(2)Thrift服务器

基于Socket通信,支持跨语言。Hive Thrift服务简化了在多编程语言中运行Hive的命令。Thrift服务绑定支持C++、Java、PHP、Python和Ruby语言。

(3)解析器

编译器完成HQL语句从词法分析、语法分析、编译、优化以及执行计划的生成。

优化器是一个演化组件,当前它的规则是:列修剪,谓词下推。

执行器会顺序执行所有的作业。如果任务链不存在依赖关系,可以采用并发执行的方式执行作业。

(4)元数据库

Hive的数据由两部分组成:数据文件和元数据。元数据用于存放Hive库的基础信息,它存储在关系数据库中,如MySQL、Derby。元数据包括数据库信息、表的名字、表的列和分区及其属性、表的属性、表的数据所在目录等。

(5)Hadoop

Hive的数据文件存储在HDFS中,大部分的查询由MapReduce完成(对于包含*的查询,比如select * from tbl不会生成MapRedcue作业)。

4)Hive运行机制

如图3⁃12,Hive的运行主要通过以下四步实现。

①用户通过用户接口连接Hive,发布Hive SQL。

②Hive解析查询并制订查询计划。

③Hive将查询转换成MapReduce作业。

④Hive在Hadoop上执行MapReduce作业。

图示

图3⁃12 Hive运行机制

5)Hive的优势

①解决了传统关系数据库在大数据处理上的瓶颈,适合大数据的批量处理。

②充分利用集群的CPU计算资源、存储资源,实现并行计算。(https://www.daowen.com)

③Hive支持标准SQL语法,免去了编写MR程序的过程,减少了开发成本。

④具有良好的扩展性,拓展功能方便。

⑤可自定义函数,实现对复杂逻辑的处理。

⑥具备较好的容错性,若出现单个数据节点的故障,任务可以正常进行。

6)Hive的缺点

①Hive的HQL表达能力有限:有些复杂运算用HQL不易表达。

②Hive效率低:Hive自动生成MR作业,通常不够智能;HQL调优困难,粒度较粗;可控性差。

③Hive无法满足交互式查询分析的性能要求。

④不支持事务型任务。

⑤对数据挖掘能力的支持有限。

针对Hive运行效率低下的问题,促使人们去寻找一种更快、更具交互性的分析框架。 Spark SQL的出现则有效地提高了SQL在Hadoop上的分析运行效率。

7)Hive的适用场景

①海量数据的存储处理。

②数据挖掘。

③海量数据的离线分析。

8)Hive的不适用场景

①复杂的机器学习算法。

②复杂的科学计算。

③联机交互式实时查询。

9)Hive安装与配置

Hive是Hadoop生态圈中的一个数据仓库工具,不是数据库。它提供SQL查询功能,但是将SQL语句转化为MapReduce任务进行的,Hive中的数据是存放在HDFS上的,可以把Hive理解为是一个Hadoop的客户端,用来提交MapReduce代码的,所以使用Hive的前提是已经安装了Hadoop。它的安装方式只有一种,可以安装在任何地方,既可以安装在集群中的任何一台计算机上,也可以安装在非集群中的计算机上。

第一步 下载Hive并解压。

Hive的下载地址:http://archive.apache.org/dist/hive/,用wget命令下载Hive并解压。

第二步 配置Hive。

需要配置Hive,这样才能够运行Hive。进入conf文件夹,并将hive⁃default.xml.template文件的内容复制到hive⁃site.xml文件中,操作如下:

Hive将元数据存储在关系数据库中,比如MySQL、Derby中。Hive默认是用Derby数据库,可以修改为MySQL(要确保计算机上面已经安装好了MySQL数据库)。

第三步 编辑/etc/profile文件。

编辑/etc/profile文件,将Hive的home目录添加进去,操作如下:

[hadoop@master conf]$ sudo vim /etc/profile

添加以下语句:

运行下面的命令,让上面的修改生效。

[hadoop@master conf]$ source /etc/profile

现在可以试一下,Hive是否安装好(需要启动Hadoop,否则不能运行成功)。

[hadoop@master conf]$ hive

如果安装成功,会出现Hive命令状态。

hive>

10)Hive常用命令

Hive的常用命令及命令功能见表3⁃7。

表3⁃7 Hive常用命令表

图示

Hive的出现大大提高了大数据仓库相关应用的开发效率,降低了非专业开发人士使用大数据仓库的门槛。Hive提供一个更高层的抽象,通过隐藏底层Hadoop平台这些琐碎的细节,将程序员从重复工作中解脱出来,使程序员可以集中精力于业务上。然而,Hive是不能作为一个完整的数据库使用的,它响应用户查询请求的延迟较大,不支持记录级别的数据修改、增加和删除,也不支持事务。如果在使用大数据仓库时需要这些数据库的特性,那么,相比于Hive,HBase就是一个更好的选择。

11)用Hive实现单词计数

第一步 本地构造数据,数据内容如下。

第二步 在Hive上创建一张表wordcount,再将本地数据导入。

第三步 利用MapReduce思想,先把每行数据转化为一个数组的形式。

第四步 将数组的每一个单词拆分出来,每行就只有一个单词。

第五步 组合语句写一个单词统计,并排序。

第六步 得到单词计数结果如下。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)