一、介绍
Apache Hive是一个分布式、容错的数据仓库系统,支持大规模的分析。Hive Metastore(HMS)提供了一个中央元数据存储库,可以轻松地进行分析,以做出明智的数据驱动决策,因此它是许多数据湖架构的关键组件。Hive构建在Apache Hadoop之上,并通过hdfs支持S3,adls,gs等存储。Hive允许用户使用SQL读取、写入和管理PB级数据。
官网地址
二、架构
Hive中主要包含:Hive-Server 2 (HS2)、Hive Metastore Server (HMS)、以及Hive Client CLI
Hive-Server 2 (HS2):HS2支持多客户端并发和身份验证。它旨在为JDBC和ODBC等开放式API客户端提供更好的支持。
简单来说:HS2提供JDBC/ODBC访问接口和用户认证
Hive Metastore Server (HMS):是关系数据库中Hive表和分区的元数据的中央存储库,并使用元存储库服务API为客户端(包括Hive、Impala和Spark)提供对此信息的访问。
简单来说:Metastore提供元数据访问接口,不负责存储元数据,通常保存在MySQL当中
元数据:在Hive中创建的数据库、表、字段信息(不包含数据信息,数据信息存储在HDFS中)
Hive Client CLI:提供客户端访问,只能在安装了Hive的本地使用
三、环境搭建
3.1、最小化安装
部署版本:3.1.3
- 下载压缩包
- 解压缩
tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /opt/module
mv apache-hive-3.1.3-bin/ /opt/module/hive
- 修改环境变量
vim /etc/profile.d/my_env.sh
#HIVE_HOME
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE/bin
- 刷新环境变量
source /etc/profile.d/my_env.sh
- 初始化元数据(默认使用derby数据库)
/opt/module/hive/bin/schematool -dbType derby -initSchema
- 启动hive
$HIVE_HOME/bin/hive
3.2、使用mysql存储元数据
- 创建元数据库
create database metastore;
- 将mysql的jdbc驱动上传到Hive的lib目录下
- 新建hive-site.xml文件
vim $HIVE_HOME/conf/hive-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- jdbc连接的URL -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false</value>
</property>
<!-- jdbc连接的Driver-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- jdbc连接的username-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- jdbc连接的password -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<!-- Hive默认在HDFS的工作目录 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
</configuration>
- 初始化元数据库
$HIVE_HOME/bin/schematool -dbType mysql -initSchema -verbose
3.3、Hive-Server 2(HS2) 部署
上面部署完hive只能在本地客户端访问,需要部署HS2才能使用远程jdcb连接访问
修改配置
# 该配置需要分发到所有hadoop节点
vim $HADOOP_HOME/etc/hadoop/core-site.xml
<!--配置所有节点的root用户都可作为代理用户-->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!--配置root用户能够代理的用户组为任意组-->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<!--配置root用户能够代理的用户为任意用户-->
<property>
<name>hadoop.proxyuser.root.users</name>
<value>*</value>
</property>
vim $HADOOP_HOME/etc/hadoop/hive-site.xml
<!-- 指定hiveserver2连接的host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hadoop102</value>
</property>
<!-- 指定hiveserver2连接的端口号 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
启动HS2
nohup $HIVE_HOME/bin/hive --service hiveserver2 &
使用DBeaver远程连接
3.4、Hive Metastore Server (HMS) 部署
为Hive CLI或者Hiveserver2提供元数据访问接口(其本身不存储元数据)
HMS分为两种运行模式:嵌入式模式、独立服务模式
嵌入模式:在每个HS2和Hive CLI中都都嵌入HMS,不做额外配置的情况下,采用的是嵌入模式
独立模式:HMS独立部署,HS2和Hive CLI获取元数据信息通过访问HMS,再由HMS访问元数据
3.4.1、嵌入模式
vim $HIVE_HOME/conf/hive-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- jdbc连接的URL -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false</value>
</property>
<!-- jdbc连接的Driver-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- jdbc连接的username-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- jdbc连接的password -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
</configuration>
3.4.1、独立模式
在嵌入模式的配置基础上增加,HS2和Hive CLI访问HMS的地址
<!-- 指定metastore服务的地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop102:9083</value>
</property>
启动HMS
nohup $HIVE_HOME/bin/hive --service metastore &