安装Hive集群

1 软件环境

注:我的Hadoop环境已经安装完成。

1.1 版本选择

版本的兼容问题很重要!!

软件环境

版本号

备注

CentOS7

7.6

JDK

1.8.0

Hadoop

3.1.3

hadoop-3.1.3.tar.gz

ZooKeeper

3.6.3

apache-zookeeper-3.6.3-bin.tar.gz

Hbase

2.4.15

hbase-2.4.15-bin.tar.gz

Hive

3.1.2

apache-hive-3.1.2-bin.tar.gz

1.2 软件下载

# Hadoop下载地址
https://hadoop.apache.org/release.html
# 下载hadoop-3.1.3.tar.gz
https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz


# ZooKeeper下载地址
https://zookeeper.apache.org/releases.html
# 下载apache-zookeeper-3.6.3-bin.tar.gz
https://dlcdn.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz


# Hbase下载地址
https://hbase.apache.org/downloads.html
# 下载hbase-2.4.15-bin.tar.gz
https://dlcdn.apache.org/hbase/2.4.15/hbase-2.4.15-bin.tar.gz


# Hive下载地址
https://hive.apache.org/downloads.html
# 下载apache-hive-3.1.2-bin.tar.gz
https://dlcdn.apache.org/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz

1.3 Hadoop集群环境

主机名

HDFS

YARN

IP地址

说明

hadoop0

DataNode、NameNode

NodeManager

192.168.108.10

主节点(master)

hadoop1

DataNode

NodeManager、ResourceManager

192.168.108.11

子节点

hadoop2

DataNode、Secondary NameNode

NodeManager

192.168.108.12

子节点

2 安装Hive

⚠️ 注意:安装Hive集群,只需要在主节点上安装Hive和MySQL即可。

Hive是一个数据仓库,适合做数据查询、统计和分析的查询引擎,由于Hive的执行延迟比较高,因此适用于实时性要求不高的场合,适合大数据集的批处理作业。Hive建立在HDFS的基础之上,数据都存储在HDFS上,元数据存储在MySQL上,Hive自己不存储数据。

2.1 Hive集群

安装目录是/opt/

主机名

Hive

HDFS

IP地址

说明

hadoop0

Hive、MySQL

DataNode、NameNode

192.168.108.10

主节点(master)

hadoop1

DataNode

192.168.108.11

子节点

hadoop2

DataNode、Secondary NameNode

192.168.108.12

子节点

2.2 主节点安装MySQL5.7

(1)安装MySQL

# (1)查看是否已经安装MySQL
rpm -qa | grep mysql

# (2)配置镜像源
# 安装wget
yum install -y wget

# 下载MySQL5.7镜像源
wget http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm
# 安装镜像源
rpm -ivh mysql57-community-release-el7-10.noarch.rpm

# (3)安装MySQL5.7
yum install -y mysql-community-server

# (4)配置MySQL
# 设置MySQL开机启动
systemctl enable mysqld
# 启动MySQL
systemctl start mysqld
# 查看MySQL状态
systemctl status mysqld

# (5)修改MySQL密码
# 查看MySQL的临时密码
cat /var/log/mysqld.log| grep password
# 返回值如下
2022-11-02T03:29:41.454891Z 1 [Note] A temporary password is generated for root@localhost: 8Re9rRD7Cq(D
# 登录MySQL,输入临时密码
mysql -u root -p

# 修改密码
ALTER USER USER() IDENTIFIED BY '123456#Abc';
# 刷新权限
FLUSH PRIVILEGES;

# 出现如下问题,表示密码太简单
# ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

(2)安装过程中的问题

问题:

源 "MySQL 5.7 Community Server" 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。
失败的软件包是:mysql-community-client-5.7.40-1.el7.x86_64
GPG  密钥配置为:file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

解决方法

rm /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql 
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

2.3 主节点安装Hive

(1) 解压文件

# 先将apache-hive-3.1.2-bin.tar.gz复制到/opt目录下
# 进入安装目录
cd /opt

# 解压文件
tar -xzvf apache-hive-3.1.2-bin.tar.gz

# 重命名文件
mv apache-hive-3.1.2-bin hive-3.1.2

# 添加环境变量
# 编辑文件
vim /etc/profile

# 在文件中添加如下内容
export HIVE_HOME=/opt/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin

# 刷新环境变量
source /etc/profile

(2)配置文件

# 进入hive-3.1.2目录
cd /opt/hive-3.1.2

# 进入配置目录
cd /opt/hive-3.1.2/conf

# 创建配置文件
touch hive-site.xml

# 编辑hive-site.xml配置文件
vim hive-site.xml

修改hive-site.xml文件,修改内容如下

注意:下面相关的配置信息都可以在"hive-default.xml.template"文件中找到。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!-- *** 1 配置MySQL *** -->
    <!-- MySQL连接地址 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
    </property>
    <!-- MySQL连接驱动 -->
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <!-- MySQL用户名 -->
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <!-- MySQL密码 -->
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456#Abc</value>
    </property>

    <!-- *** 2 配置Hive *** -->
    <!-- 设置hive为本地模式,不设置此参数,Hive无法插入数据 -->
    <property>
        <name>hive.exec.mode.local.auto</name>
        <value>true</value>
    </property>
    <!-- Hive在HDFS中存储数据的路径 -->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
    </property>

    <!-- 关闭Hive元数据存储验证 -->
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
    <!-- 关闭Hive元数据存储授权 -->
    <property>
        <name>hive.metastore.event.db.notification.api.auth</name>
        <value>false</value>
    </property>
    <!-- 设置存储元数据的连接地址 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://hadoop0:9083</value>
    </property>

    <!-- 在命令行中显示当前操作的数据库 -->
    <property>
        <name>hive.cli.print.current.db</name>
        <value>true</value>
    </property>

    <!-- 在命令行中显示数据的表头 -->
    <property>
        <name>hive.cli.print.header</name>
        <value>true</value>
    </property>


    <!-- *** 3 配置hiveserver2 *** -->
    <!-- 配置hiveserver2端口 -->
    <property>
        <name>hive.server2.thrift.port</name>
        <value>10000</value>
    </property>
    <!-- 配置hiveserver2主机 -->
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>hadoop0</value>
    </property>

    <!-- 设置用户权限 -->
    <!-- User: root is not allowed to impersonate root -->
    <property>
        <name>hive.server2.enable.doAs</name>
        <value>false</value>
    </property>

</configuration>

(3)添加MySQL驱动

# 从maven仓库上下载MySQL的JDBC驱动,下载地址如下:
https://mvnrepository.com/artifact/mysql/mysql-connector-java

# 复制JDBC驱动,我用的驱动是"mysql-connector-java-8.0.23.jar"
cp mysql-connector-java-8.0.23.jar /opt/hive-3.1.2/lib/

2.4 初始化Hive

# 在MySQL数据库中创建元数据库
create database metastore;

# 初始化Hive数据库,初始化结束后,MySQL数据库中的hive数据库会自动创建相关的表
schematool -initSchema -dbType mysql -verbose

# 出现下面的结果说明初始化完成

hive集群资源使用率监控 hive集群安装_大数据

问题1

# 出现以下错误
# 由于Hadoop依赖的guava.jar和Hive的版本不一致,将低版本的换成高版本的,我的Hadoop中guava.jar版本较高
com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)

# Hive中的guava所在目录
/opt/hive-3.1.2/lib

# Hadoop中的guava所在目录
/opt/hadoop-3.1.3/share/hadoop/common/lib/

hive集群资源使用率监控 hive集群安装_hive_02

解决方法

将Hadoop中的guava复制到Hive中的目录中即可(两个文件名稍微有点区别是没有问题的)

# 进入opt目录下
cd /opt

# 删除“hive-3.1.2/lib”目录中的guava-19.0.jar
rm hive-3.1.2/lib/guava-19.0.jar

# 复制Hadoop中的guava
cp hadoop-3.1.3/share/hadoop/common/lib/guava-27.0-jre.jar hive-3.1.2/lib/

问题2

# 出现以下问题,可能是MySQL数据库中已经创建了hive数据库,对应配置参数中的数据库
# <property>
#      <name>javax.jdo.option.ConnectionURL</name>
#      <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
# </property>

Schema initialization FAILED! Metastore state would be inconsistent !!

解决方法

# 删除MySQL数据库中的hive数据库
# 进入MySQL数据库后执行以下语句
drop database hive;

2.5 启动Hive

# 在命令行中输入
hive

hive集群资源使用率监控 hive集群安装_Hive_03

2.6 Hive的简单使用

Hive的使用方法与MySQL的使用方法基本相似。

# 创建数据库
create database henu;

# 查看数据库的详情
desc database henu;

# 切换数据库
use henu;

# 删除数据库
drop database henu;

# 创建表
CREATE TABLE department(
id INT,
name STRING
);

# 查看表
show tables;

# 插入数据
INSERT INTO department VALUES 
(1,'软件学院'),
(2,'计算机学院'),
(3,'文学院');

# 查看表数据
select * from department;

2.7 使用Beeline CLI连接

使用Beeline CLI连接需要修改Hadoop的配置文件。

(1)修改Hadoop配置文件

修改hadoop集群的hdfs-site.xml配置文件,添加如下配置信息,启用 webhdfs。

<property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
</property>

修改hadoop集群的core-site.xml配置文件,添加如下配置信息,设置hadoop 的代理用户

<property>
    <name>hadoop.proxyuser.hadoop.hosts</name>
    <value>*</value>
</property>
<property>
    <name>hadoop.proxyuser.hadoop.groups</name>
    <value>*</value>
</property>

在主节点上配置完成后,将配置文件复制给子节点。

scp core-site.xml hdfs-site.xml hadoop1:/opt/hadoop-3.1.3/etc/hadoop
scp core-site.xml hdfs-site.xml hadoop2:/opt/hadoop-3.1.3/etc/hadoop

(2)启动hiveserver2服务

# 启动hiveserver2,注意:启动特别慢!特别慢!!!,一般情况下”Hive Session ID“出现8个以上。
hive --service hiveserver2 &

# 启动metastore
hive --service metastore &

# 查看是否启动成功,如果出现端口号,说明启动成功,否则没有启动成功
netstat -anp|grep 10000

# 启动beeline
beeline
# 连接主机,不需要输入账号和密码(自定义也可以),直接按Enter即可
!connect jdbc:hive2://hadoop0:10000

hive集群资源使用率监控 hive集群安装_hadoop_04

启动成功页面

# hiveserver2的Web界面,默认端口号是10002
http://192.168.108.10:10002/

hive集群资源使用率监控 hive集群安装_hive_05

(3)停止metastore和hiveserver2服务

# 查看进程
jps
# 返回值
24097 NodeManager
72344 RunJar
22266 DataNode
88891 RunJar
90941 Jps
21918 NameNode

# 进程RunJar就是metastore和hiveserver2服务
# 停止服务
kill 72344
kill 88891