Hive

零、资源准备

  • apache-hive-3.1.3-bin.tar.gz
  • mysql-connector-java-8.0.30.jar

约定:所有安装包存放于/software, 安装目录为/opt。

一、安装准备(MySQL)

  1. 安装MySQL

将MySQL安装在虚拟机Hadoop3。

1)下载MySQL的源文件

可以通过 wget 工具下载 MySQL 源文件。

1
2
3
cd /software
yum -y install wget
wget http://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm

image-20240721214134672

2)安装MySQL源

安装下载的MySQL源文件,在MySQL源文件所在目录执行如下命令。

1
yum localinstall mysql80-community-release-el9-1.noarch.rpm

image-20240721214205637

3)安装MySQL

1
yum install mysql-community-server -y

如果出现Error: GPG check FAILED错误,是Mysql的GPG升级的缘故

image-20240721214418834

解决办法:

(1)获取GPG:rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023

(2)重新配置GPG: vi /etc/yum.repos.d/mysql-community.repo

image-20240721214353421

(3)运行yum install mysql-community-server -y重新安装MySQL

image-20240721214505630

如果还是不能解决,可以参考官方安装指南: https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en

4)启动MySQL服务

启动MySQL服务,在虚拟机Hadoop3上执行如下命令。

1
systemctl start mysqld

可以使用命令 systemctl status mysqld 检查服务状态

image-20240721214604836

MySQL安装完成后,默认为root用户提供了初始密码,查看该初始密码的命令如下所示。

5)查看MySQL初始密码

MySQL安装完成后,默认为root用户提供了初始密码,查看该初始密码的命令如下所示。

grep 'temporary password' /var/log/mysqld.log

image-20240721215052539

6)修改密码

通过root用户,以及MySQL为root用户提供的初始密码登陆MySQL,具体命令如下。

1
mysql –uroot -p

image-20240721214956930

MySQL默认为root提供的密码较为复杂不便使用,这里将root用户的密码修改为Abc@2024,刷新MySQL配置,使修改root用户密码的操作生效,具体命令如下。

1
2
mysql> alter user 'root'@'localhost' identified by 'Abc@2024';
mysql> FLUSH PRIVILEGES;

image-20240721215307052

7)配置远程访问

修改Mysql配置文件vi /etc/my.cnf, 在[mysqld]选项下添加如下配置:

1
bind-address=0.0.0.0

image-20240721215407772

授权帐号可以远程登录,介绍两种方法,任选其一:

方法一:改表法

1
2
3
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>select host, user from user;

方法二:授权法

1
2
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Abc@2024' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;

最后重启Mysqld服务

1
systemctl restart mysqld

image-20240721222738201

这里将Hive安装在hadoop1虚拟机上

二、完全分布式部署(Hive)

  1. 安装Hive

1)上传Hive安装包

通过Hive官网或者文末提供的百度网盘链接下载Hive的安装包apache-hive-3.1.3-bin.tar.gz,使用相关工具(如finalshell)上传安装包到 /software目录。

image-20240721215756915

2) 安装Hive

以解压方式安装Hive,将Hive安装到目录/opt,创建软链接(或重命名),在虚拟机hadoop1上执行如下命令即可。

1
2
tar -zxvf /software/apache-hive-3.1.3-bin.tar.gz -C /opt	
ln -s /opt/apache-hive-3.1.3-bin /opt/hive

image-20240721220258104

3) 同步guava包

将Hive中的guava-19.0.jar替换为Hadoop中的guava-27.0-jre.jar,具体操作执行如下命令。

1
2
3
cd /opt/hadoop-3.3.6/share/hadoop/common/lib	
cp guava-27.0-jre.jar /opt/hive/lib/
rm -fr /opt/hive/lib/guava-19.0.jar

image-20240721220458343

4)配置Hive系统环境变量

在虚拟机执行vi /etc/profile命令配置系统环境变量文件profile,在该文件的底部添加如下内容。

1
2
export HIVE_HOME=/opt/hive
export PATH=$PATH:$HIVE_HOME/bin

执行source /etc/profile命令初始化系统环境变量使添加的Hive系统环境变量生效。

image-20240721220549718

  1. 配置Hive

在Hive安装目录的/opt/hive/conf下执行vi hive-site.xml命令创建Hive配置文件hive-site.xml,在该文件中添加如下内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop1:3306/hive?createDatabaseIfNotExist=true </value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>Abc@2024</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hadoop1</value>
</property>
</configuration>

常用参数介绍如下:

属性名称 类型 默认值 描述
hive.metastore.warehouse.dir URI /user/hive/warehouse 配置Hive数据存储在HDFS上的目录,托管表就存储在这里
hive.server2.thrift.port INT 默认10000 配置hiveserver2的端口
hive.server2.thrift.bind.host String localhost 配置hiveserver2的主机
hive.metastore.uris 逗号分隔的URI 未设定 如果未设置(默认值),则使用当前的metastore,否则连接到由URI列表指定要连接的远程metastore服务器。如果有多个远程服务器,则客户端便以轮询方式连接
javax.jdo.option.ConnectionURL URI jdbc:derby:;
databaseName=metastore_db;
create=true
配置JDBC连接地址, mysql示例: jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true
javax.jdo.option.ConnectionDriverName String org.apache.derby.jdbc.EmbeddedDriver 配置JDBC驱动, mysql示例: com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName String APP 配置连接MySQL的用户名
javax.jdo.option.ConnectionPassword String mine 配置连接MySQL的密码
  1. 元数据初始化

1)上传MySQL驱动包

在官网或者文末网盘链接下载MySQL驱动包mysql-connector-java-8.0.31.jar,将上传到在虚拟机hadoop1的/opt/hive/lib目录。

image-20240722084229022

2)初始化MySQL

在操作本地模式部署的Hive之前,需要执行初始化MySQL的操作,具体命令如下。

1
schematool -initSchema -dbType mysql

image-20240721222820025

  1. 测试

1)启动Hadoop

在虚拟机hadoop1中,使用命令start-all.sh启动hadoop集群。

2)CLI测试

hive命令后不跟参数时,默认启动cli,即下面命令可以省略—service cli参数

1
2
hive --service cli
hive> show databases;

image-20240721222937588

  1. beeline测试(需保持hive启动状态)

Beeline是Hive 0.11版本引入的Hive客户端工具,它通过JDBC的方式连接HiveServer2服务。所以在使用beeline客户端,需要启动hiveserver2服务(HS2),在hadoop1上运行如下命令。

1
nohup hive --service hiveserver2  &

提示,在启动一些后台守护进程时经常搭配使用nohup和&: nohup <程序名> &

使用nohup运行程序使用Ctrl+C 发送SIGINT信号,程序关闭;关闭session发送SIGHUP信号,程序免疫

使用&后台运行使用Ctrl+C 发送SIGINT信号,程序免疫;关闭session发送SIGHUP信号,程序关闭

运行如下命令测试环境。

1
2
3
4
5
6
7
#启动beeline
beeline
#在交互界面输入连接信息:
!connect jdbc:hive2://hadoop1:10000
#输入用户名和密码,注意,输入的用户名root和密码123456是虚拟机hadoop1的用户名和密码
#查看所有数据库
show databases;

image-20240722085235129

在运行beeline命令时,也可以使用下面命令指定连接的服务地址和用户名。

1
beeline -u jdbc:hive2://hadoop1:10000 -n root	
  • 参数-u:用于指定HiveServer2服务的地址。

  • hadoop1:表示启动HiveServer2服务的服务器主机名。

  • 10000:是HiveServer2服务默认使用的端口。

  • 参数-n:用于指定连接HiveServer2服务时加载的用户名,该用户名必须具有操作HDFS的权限。

  1. 远程模式

将MetaStore服务部署在虚拟机hadoop2上。

网络拓扑:

服务 虚拟机
MetaStore hadoop2
HiveServer2 hadoop1

1)修改Hive配置

进入虚拟机hadoop1中Hive安装目录下的conf目录,在该目录下执行vi hive-site.xml命令创建Hive配置文件hive-site.xml,在该文件中添加如下内容。

1
2
3
4
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop2:9083</value>
</property>

hive.metastore.uris用于指定MetaStore服务器的地址,如有多个地址,使用逗号隔开。如果未设置(默认值),则使用当前的MetaStore,否则连接到由URI列表指定要连接的远程MetaStore服务器。如果有多个远程服务器,则客户端便以轮询方式连接。

image-20240722085504926

2)同步Hive

将hadoop1的Hive环境同步到hadoop2, 在hadoop1上执行一下命令:

1
2
scp -r /opt/hive root@hadoop2:/opt
scp /etc/profile root@hadoop2:/etc

3)启动服务

在hadoop2主机上启动MetaStore服务

1
nohup hive --service metastore &

在hadoop1主机上启动HiveServer2服务

1
nohup hive --service hiveserver2 &

注意,在本地模式步骤中已经启动了Hiveserver2服务,可以使用ps -ef | grep hive命令查看进程ID,使用kill -9进程ID结束指定进程。