安装Hive集群
安装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
# 出现下面的结果说明初始化完成
问题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/
解决方法
将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
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
启动成功页面
# hiveserver2的Web界面,默认端口号是10002
http://192.168.108.10:10002/
(3)停止metastore和hiveserver2服务
# 查看进程
jps
# 返回值
24097 NodeManager
72344 RunJar
22266 DataNode
88891 RunJar
90941 Jps
21918 NameNode
# 进程RunJar就是metastore和hiveserver2服务
# 停止服务
kill 72344
kill 88891