Apache Hive安装与部署
一、上传安装文件
将Hive安装文件apache-hive-2.3.0-bin.tar.gz从Windows本地上传至Linux系统/root/tools/目录下,上传成功后如下图:
二、解压安装文件
在当前目录执行tar -zxvf apache-hive-2.3.0-bin.tar.gz -C ~/training/解压命令,将文件解压到/root/training/目录下,部分解压过程如图:
进入/root/training/目录查看解压后的目录,如图:
解压成功!
二、编辑.bash_profile文件
执行vi ~/.bash_profile命令打开系统环境变量配置文件.bash_profile,在文件末尾添加如下两个变量:
# Hive安装目录
HIVE_HOME=/root/training/apache-hive-2.3.0-bin
export HIVE_HOME
# Hive的bin目录
PATH=$HIVE_HOME/bin:$PATH
export PATH
添加完成后,保存并退出配置文件。在命令行执行source ~/.bash_profile命令,使配置文件生效。
三、添加配置文件hive-site.xml
我们进入Hive安装目录下的conf目录中查看配置文件情况,如图:
在conf目录下,我们新建一个hive-site.xml文件,内容如下:
该内容为XML文件格式。
Hive安装模式主要有两个:
-- 本地/嵌入模式
在这种模式下,Hive的元数据metadata存储本地Derby数据库中,一次只允许一个进程访问,主要用于单元测试中。
-- 远程模式
在这种模式下,Hive的元数据metadata存储在单独的数据库中,例如MySQL,Postgres,Oracle,MS SQL Server等关系型数据库。
首先我们以本地/嵌入式模式配置为例,如下:
1、Local/Embedded Mode
hive-site.xml全部内容配置如下:
文件中各属性详细介绍如下:
该属性配置包含元数据metadata的数据库的JDBC连接字符串,数据库默认为嵌入式Derby数据库,数据库名称为junit_metastore_db。create参数值为true,指明数据库junit_metastore_db不存在时则会自动创建。
(3)hive.metastore.local
该属性配置元数据存储模式类型,已经从Hive 0.10中移除,我们可以通过属性hive.metastore.uris对其进行配置,如果hive.metastore.uris属性配置为空则为本地模式,否则为远程模式,所以此处可以不配置该属性。
(4)hive.metastore.warehouse.dir
该属性配置warehouse(数据仓库)的目录,这里我们配置数据仓库名称为junit_warehouse。
四、测试
1、初始化Derby数据库
命令:schematool -dbType derby -initSchema
在命令行执行上面命令,如图:
该初始化实质上执行了hive-schema-2.3.0.derby.sql脚本,从Hive配置文件中抽取出Derby数据库的一些连接信息。
初始化成功后后,我们进入Hive安装目录,如下:
在目录下生成了一个junit_metastore_db目录,其中包含了一些数据目录和文件,这些文件中存储了数据库的元数据。
2、启动hive
在启动Hive之前,我们需要启动Hadoop,原因在于Hive底层是基于Hadoop的MapReduce工作的。首先在命令行执行start-all.sh命令启动Hadoop集群,如图:
然后执行jps,查看Hadoop集群是否启动成功,如图:
经启动成功!其次,在命令行执行hive命令启动Hive命令行,启动成功后,如图:
接下来我们在Hive中创建表,插入数据,查询表数据来演示Hive的基本使用,
(1)创建一张stu学生表
我们创建一张stu学生表,包含学生id、学生姓名name、学生年龄三个字段,如图:
创建表的SQL语法同关系型数据库一样!创建成功后,我们再次进入Hive安装目录查看发生了生么,如图:
我们看到,在当前目录下产生了一个名为junit_warehouse的目录,下面有一个stu的目录,stu目录下暂时为空!事实上,在Hive中,junit_warehouse目录类似于关系型数据库的一个实例,而stu目录类似关系型数据库中的一张表,之后我们还会看到,stu目录下的文件存储了关系型数据库中表的数据!
(2)插入几条数据
在Hive命令行执行insert into stu values(1,”Tom”,20),插入一条数据,如图:
我们发现执行该SQL时,Hive引擎将其转换成一个MapReduce任务,可以登录Hadoop的UI页面(ip地址:192.168.189.111:8088)查看该任务具体执行过程,如图:
我们继续插入2条数据,
hive> insert into stu values(2,"Mike",50);
hive> insert into stu values(3,"Jone",34);
执行成功后,查看stu目录如下:
目录下生成了三个文件,每个文件保存一条数据!
(3)查看数据
执行select查询SQL,如下:
Hive操作与SQL1999如此相似,让数据库人员更容易使用Hive对数据进行分析!
五、Hive远程模式安装
前面我们已经成功安装了Hive的Local Mode。这部分我们介绍Hive的Remote Mode!我们只需要将Local Mode第三步替换成以下步骤即可。
1、安装MySQL数据库
此部分不是重点(略),我们已经在本机安装好MySQL!使用Navicat连接工具连接后,如图:
MySQL实例中仅有information_schema数据库!
2、安装MySQL的jar包
将mysql的jar包上传至/root/training/apache-hive-2.3.0-bin/lib目录下
3、新建hive-site.xml配置文件
配置属性如下:
MySQL数据库连接URL
MySQL连接驱动类名
MySQL数据库连接用户名
MySQL数据库连接密码
4、初始化MySQL
执行命令schematool -dbType mysql -initSchema,如图:
成功初始化后,则会在MySQL实例中新建一个hive数据库,如图:
其中,表TBLS存储Hive表的元数据,表COLUMNS_V2存储表的字段元数据
hive数据库中各元数据表之间的关系参见:
https://issues.apache.org/jira/secure/attachment/12471108/HiveMetaStore.pdf
5、测试
执行hive命令,启动hive命令行,如图:
(1)创建表stu
create table stu(id int,name string,age int);如图:
我们打开MySQL数据库中TBLS表,如下:
打开表COLUMNS_V2如下:
(2)插入3条数据
执行下面三条SQL语句,向stu中插入三条数据
hive> insert into stu values(1,"Tom",20);
hive> insert into stu values(2,"Mike",50);
hive> insert into stu values(3,"Jone",34);
那么在远程模式下,Hive表中数据保存在哪呢?我们登录HDFS(地址:192.168.189.111:50070),如图:
我们看到刚插入的三条数据保存在了HDFS文件系统中!
(3)查询数据
在Hive命令行执行查询SQL,如图:
综上,有以下几个不同:
a、在本地模式中,元数据保存在本地文件系统中,而在远程模式中,元数据保存在关系型数据库中,本例保存在MySQL数据库中
b、在本地模式中,数据库存储在本地文件系统中,以目录形式存在,数据库中的表以子目录形式存在,表中的数据以文件形式存在;而在远程模式中,数据库存储在HDFS文件系统中,以目录形式存在,数据库中的表以子目录形式存在,表中的数据以文件形式存在。两者仅仅文件系统不同而已。