〇、准备
0.参考材料
Hive(一)——安装配置
Hive为什么要启用Metastore
Hive Metastore原理及配置
Hadoop2.9+Hive3.0+Mysql8.0
1.Hive知识准备
①Hive是什么?
②hive的元数据库、MetaStore服务与客户端的关系
这三者的关系在上一篇参考材料中有说明,这里贴一张图略作说明:
在HDFS之上,metastore连接元数据库(自带的derby、MySQL、PostgreSQL等),metastore服务配置中会包含元数据库的访问用户名密码;对于hive客户端来说,只需要配置连接metastore服务即可,不需要知道元数据库的用户密码,而Hive的作用就是将SQL转变成类MapReduce语句。
③三种部署模式
需要说明的是:衡量部署模式的标准是hive客户端与metastore的进程关系
- 内嵌模式(Embedded)
hive服务和metastore服务运行在同一个进程中,derby服务也运行在该进程中.内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。
这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。
- 本地模式(Local):本地安装mysql替代derby存储元数据
不再使用内嵌的Derby作为元数据的存储介质,而是使用其他数据库比如MySQL来存储元数据。hive服务和metastore服务运行在同一个进程中,mysql是单独的进程,可以同一台机器,也可以在远程机器上。
这种方式是一个多用户的模式,运行多个用户client连接到一个数据库中。这种方式一般作为公司内部同时使用Hive。每一个用户必须要有对MySQL的访问权利,即每一个客户端使用者需要知道MySQL的用户名和密码才行。
- 远程模式(Remote): 远程安装mysql 替代derby存储元数据
Hive服务和metastore在不同的进程内,可能是不同的机器,该模式需要将hive.metastore.local设置为false,将hive.metastore.uris设置为metastore服务器URL。
远程元存储需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。将metadata作为一个单独的服务进行启动。各种客户端通过beeline来连接,连接之前无需知道数据库的密码。
仅连接远程的mysql并不能称之为“远程模式”,是否远程指的是metastore和hive服务是否在同一进程内。
2.环境准备(远程模式)
①Ubuntu
②HDFS
③MySQL(或者其他元数据库)
一、部署
1.下载(清华源)
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-3.1.1/apache-hive-3.1.1-bin.tar.gz
2.解压安装
tar -zxvf apache-hive-3.1.1-bin.tar.gz -C ../local/
mv apache-hive-3.1.1-bin/ hive-3.1.1/
3.环境变量
sudo vi ~/.bashrc #最好在/etc/profile中也做一遍
#最下面添加
export HIVE_HOME=/home/hadoop/local/hive-3.1.1
export PATH=$PATH:$HIVE_HOME/bin
#保存后编译
source ~/.bashrc
4.配置文件
①metastore服务端
hive-site.xml
cd hive-3.1.1/conf/
sudo vi hive-site.xml
<configuration>
<property><!--数据库连接地址,使用MySQL存储元数据信息-->
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.1.110:3306/hive?createDatabaseIfNotExist=true&useSSL=false</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>hadoop</value>
<description>Username to use against metastore database</description>
</property>
<property><!--密码-->
<name>javax.jdo.option.ConnectionPassword</name>
<value>hadoop</value>
<description>password to use against metastore database</description>
</property>
<property><!--本地表的默认位置-->
<name>hive.metastore.warehouse.dir</name>
<value>/usr/hive/warehouse</value>
</property>
<property><!--这个可以不要-->
<name>hive.metastore.uris</name><!--Hive连接到该URI请求远程元存储的元数据-->
<value>thrift://192.168.1.108:9083</value>
</property>
</configuration>
sudo vi hive-env.sh
# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/home/hadoop/local/hadoop-3.2.0/
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/home/hadoop/local/hive-3.1.1/conf
# Folder containing extra libraries required for hive compilation/execution can be controlled by:
export HIVE_AUX_JARS_PATH=/home/hadoop/local/hive-3.1.1/lib
②客户端
hive-site.xml
</configuration>
<property><!--本地表的默认位置-->
<name>hive.metastore.warehouse.dir</name>
<value>/usr/hive/warehouse</value>
</property>
<property><!--这个一定要有-->
<name>hive.metastore.uris</name><!--Hive连接到该URI请求远程元存储的元数据-->
<value>thrift://192.168.1.108:9083</value>
</property>
</configuration>
hive-env文件与服务端相同即可(主要是路径添加)
③其他
切换到hadoop,建立以下文件目录(需要指定的话):
hadoop fs -mkdir -p /usr/hive/tmp
hadoop fs -mkdir -p /usr/hive/logs
hadoop fs -mkdir -p /usr/hive/warehouse
hdfs dfs -chmod -R 777 /usr/hive/tmp
hdfs dfs -chmod -R 777 /usr/hive/logs
hdfs dfs -chmod -R 777 /usr/hive/warehouse
有时候还需要切换Hadoop离开安全模式:hdfs dfsadmin -safemode leave
5.connector(metastore服务端需要,客户端不需要)
可以去官网下载 https://dev.mysql.com/downloads/connector/j/
选择对应的系统版本,再解压安装后拷贝到~/local/hive-3.1.1/lib
二、验证
1.服务端启动服务
schematool -initSchema -dbType mysql #初始化
hive --service metastore -p 9083 & #启动服务
2.客户端
cd ~/local/hive-3.1.1/
hive
hive>show databases;