Hive学习之路(一):Hive的基本概念与安装配置

一、初识Hive

1.Hive的基本概念

Hive是Apache社区的开源项目,是建立在Hadoop之上的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。

也就是说,Hive是一个数据仓库工具,它不提供数据存储功能,数据存储在Hadoop集群上,其本质是对HDFS结构化数据的管理,为其建立一张张的表,并对MapReduce进行封装,通过类SQL语句处理数据,Hive会将类SQL语句转化为MapReduce作业跑在YARN上。

2.Hive的适用场景

Hive 并不适合那些需要低延迟的应用,例如,联机事务处理(OLTP)。Hive 查询操作过程严格遵守Hadoop MapReduce 的作业执行模型,Hive 将用户的HiveQL 语句通过解释器转换为MapReduce 作业提交到Hadoop 集群上,Hadoop 监控作业执行过程,然后返回作业执行结果给用户。Hive 的最佳使用场合是大数据集的批处理作业,例如,网络日志分析。

3.Hive执行作业的过程

Hive学习之路(一):Hive的基本概念与安装配置
1.Execute Query:hive界面如命令行或Web UI将查询发送到Driver(任何数据库驱动程序如JDBC、ODBC,等等)来执行。

2.Get Plan:Driver根据查询编译器解析query语句,验证query语句的语法,查询计划或者查询条件。

3.Get Metadata:编译器将元数据请求发送给Metastore(任何关系型数据库)。

4.Send Metadata:Metastore将元数据作为响应发送给编译器。

5.Send Plan:编译器检查要求和重新发送Driver的计划。到这里,查询的解析和编译完成。

6.Execute Plan:Driver将执行计划发送到执行引擎。

7.Execute Job:Hadoop内部执行的是mapreduce工作过程,任务执行引擎发送一个任务到资源管理节点(ResourceManager),资源管理器分配该任务到任务节点,由任务节点上开始执行mapreduce任务。

7.1 Metadata Ops:在执行引擎发送任务的同时,对hive的元数据进行相应操作。

8.Fetch Result:执行引擎接收数据节点(data node)的结果。

9.Send Results:执行引擎发送这些合成值到Driver。

10.Send Results:Driver将结果发送到Hive接口。

4.Hive与HBase的区别

1.HBase是建立在Hadoop之上的NoSQL,是非关系型数据库,Hive是数据仓库,不是数据库。
2.HBase提供海量数据的随机定位和实时读写,毫秒级别内响应查询请求,Hive的查询并不能在短时间内响应。
3.HBase只提供数据的存储和查询功能,没有数据的处理能力,Hive提供类SQL的方式对数据进行处理,底层转变为MapReduce跑在YARN上。
4.Hive和HBase是两种基于Hadoop的不同技术,Hive是一种类SQL的引擎,并且运行MapReduce任务,Hbase是一种在Hadoop之上的NoSQL 的Key/Value数据库。

二、Hive的安装与配置

Hive是建立在Hadoop之上的类SQL引擎,因此在安装Hive之前首先安装Hadoop集群并运行。详情请移步:Hadoop完全分布式搭建(附带实用集群管理脚本)

Hive的安装方式与其元数据的存储方式有关:

1.内嵌模式

使用Hive自带的Derby数据库,元数据存储在Hive所在的主机。

2.本地模式

不使用Hive自带的数据库,使用其他关系型数据库,如MySQL,且MySQL与Hive在同一台主机上。

3.远程模式

不使用Hive自带的数据库,使用其他关系型数据库,如MySQL,且MySQL与Hive在不同的台主机上。本次演示使用远程模式:
(1). 下载Hive安装包
下载Hive安装包到本地,演示使用的版本是:hive-2.1.0,对应的安装包是:apache-hive-2.1.0-bin.tar.gz,大家可以去官网下载。
(2). 解压Hive安装包
使用命令tar -zxvf apache-hive-2.1.0-bin.tar.gz -C ~/app/解压压缩包。-C后跟你解压的目标路径。
(3). 配置环境变量
使用命令vim ~/.bash_profile编辑该文件,添加如下内容:
Hive学习之路(一):Hive的基本概念与安装配置
(4). 配置 hive-env.sh 文件
进入$HIVE_HOME/conf下,使用命令cp hive-env.sh.template hive-env.sh 复制一份hive-env.sh文件,打开该文件,配置如下内容:
Hive学习之路(一):Hive的基本概念与安装配置
(5). 配置 hive-site.xml 文件
进入$HIVE_HOME/conf下,打开该文件(有些版本的Hive没有该文件,如果没有该文件,请先使用命令touch hive-site.xml创建一个),添加如下配置:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://hadoop00:3306/hive</value>
    <description>配置你数据库的url,并使用名为hive的数据库存放元数据,名字可以自定义但是要先在MySQL中创建好</description>
  </property>
  
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    <description>数据库的用户名</description>
  </property>

 <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>root</value>
    <description>数据库的密码</description>
  </property>

<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>数据库的驱动</description>
</property>
</configuration>

(6). 拷贝MySQL的驱动到Hive的目录下
使用命令cp mysql-connector-java-5.1.42.jar $HIVE_HOME/lib,MySQL的驱动需要提前下载好。
(7). 启动Hive
使用命令$HIVE_HOME/bin/./hive 进入hive shell中:
Hive学习之路(一):Hive的基本概念与安装配置
(8). 查看MySQL的hive数据库
会发现有如下的表:
Hive学习之路(一):Hive的基本概念与安装配置
至此,Hive安装与基本配置就完成了。

三、总结

我们首先了解了什么是Hive,结合Hive的特点探究Hive的适用场景,然后浏览了一遍Hive的作业执行流程,最后将Hive与HBase作了比较,得到两者的区别。演示了Hive的远程模式的安装步骤。
在下一节内容中将会演示Hive表的各种操作,详情请移步 Hive学习之路(二):Hive表操作详讲,谢谢大家的阅读,我是人间,乐于结交共同学习的小伙伴,欢迎一起交流学习!