前言:安装 Hive 之前请先确保你当前已经安装好了 Hadoop,并且运行正常。
本文中使用的 Hadoop 版本为 hadoop-3.1.3
、Hive 版本为 hive-3.1.2
、MySQL 版本为 MySQL 5.7
。
集群其它生态安装与配置:
Hadoop 完全分布式搭建(超详细)
Spark 集群搭建(多种方式)
Sqoop 安装配置(超详细)
Hudi 0.12.0 搭建——集成 Hive 与 Spark
rpm -qa | grep mysql
rpm -qa | grep mariadb
# 强制删除
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
curl -O https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm
如果出现错误:curl: (6) Could not resolve host: repo.mysql.com; 未知的错误
,是由于 DNS 解析的问题导致的。
解决方法: 编辑文件 vim /etc/resolv.conf
,在其中添加如下内容:
options timeout:2 attempts:3 rotate single-request-reopen
; generated by /usr/sbin/dhclient-script
nameserver 8.8.8.8
这样就可以正常获取下载源了。
yum localinstall mysql57-community-release-el7-11.noarch.rpm
yum repolist enabled | grep "mysql.*-community.*"
yum install mysql-community-server
如果安装过程中出现如下错误时:
重新导入一个新的公钥即可:
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
systemctl start mysqld
systemctl status mysqld
# 查看临时密码
cat /var/log/mysqld.log | grep password
# 输入临时密码进入 MySQL
mysql -uroot -p
# 进入后必须先修改密码!
set password = password("新密码");
如果你的密码过于简单,会出现如下错误:
Your password does not satisfy the current policy requirements.
修改其安全等级即可:
# 必须按顺序执行
set global validate_password_policy=0;
set global validate_password_length=1;
修改权限(允许所有用户连接):
update mysql.user set host='%' where user='root';
# 刷新权限
flush privileges;
MySQL 安装完成!
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module/
# 修改一下文件夹名称
cd /opt/module
mv apache-hive-3.1.2-bin/ hive-3.1.2
cp mysql-connector-java-5.1.37-bin.jar /opt/module/hive-3.1.2/lib/
vi /etc/profile
#HIVE_HOME
export HIVE_HOME=/opt/module/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin
添加完成后使其立即生效:source /etc/profile
这一步也可以不做,只是后面启动 Hive 时会有一堆警告信息。
mv $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.bak
cd $HIVE_HOME/conf
# 创建 hive-site.xml 文件
vi hive-site.xml
在文件中添加如下内容(结合自身配置的 MySQL 进行修改):
<configuration>
<property>
<name>javax.jdo.option.ConnectionURLname>
<value>jdbc:mysql://master:3306/metastore?useSSL=false&useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=truevalue>
property>
<property>
<name>javax.jdo.option.ConnectionDriverNamename>
<value>com.mysql.jdbc.Drivervalue>
property>
<property>
<name>javax.jdo.option.ConnectionUserNamename>
<value>rootvalue>
property>
<property>
<name>javax.jdo.option.ConnectionPasswordname>
<value>000000value>
property>
<property>
<name>hive.metastore.schema.verificationname>
<value>falsevalue>
property>
<property>
<name>hive.metastore.event.db.notification.api.authname>
<value>falsevalue>
property>
<property>
<name>hive.metastore.warehouse.dirname>
<value>/user/hive/warehousevalue>
property>
<property>
<name>hive.cli.print.headername>
<value>truevalue>
property>
<property>
<name>hive.cli.print.current.dbname>
<value>truevalue>
property>
<property>
<name>hive.metastore.urisname>
<value>thrift://master:9083value>
property>
configuration>
# 进入 MySQL
mysql -uroot -p000000
# 创建元数据库(注意与 hive-site.xml 配置文件中连接的库保持一致)
create database if not exists metastore;
# 退出
quit;
# 初始化 Hive 元数据库
$HIVE_HOME/bin/schematool -initSchema -dbType mysql -verbose
请先启动 Hadoop 集群。
# 进入 Hive
$HIVE_HOME/bin/hive
# 创建任意库,检测是否正常。
create database if not exists test;
可以看到运行正常,这样我们的 Hive 就已经搭建完成啦!
hive-site.xml
中添加如下两项参数:
<property>
<name>hive.server2.thrift.portname>
<value>10000value>
property>
<property>
<name>hive.server2.thrift.bind.hostname>
<value>mastervalue>
property>
<property>
<name>hive.users.in.admin.rolename>
<value>rootvalue>
property>
注意更换成你自己连接的主机地址。
在 hadoop 的核心配置文件 core-site.xml
中添加如下两项参数:
指定集群可以连接的用户,我这里设置为 root 用户。
假如我想指定用户名为 master
,则配置项中的 root
必须改为 master
,如:hadoop.proxyuser.master.hosts
。
<property>
<name>hadoop.proxyuser.root.hostsname>
<value>*value>
property>
<property>
<name>hadoop.proxyuser.root.groupsname>
<value>*value>
property>
添加完成后注意分发该文件到其它机器,然后重启 Hadoop。
Hadoop 重启完成后,启动 hive 元数据服务与 hiveserver2 服务:
nohup hive --service metastore &
nohup hive --service hiveserver2 &
进入 Hive,选择需要操作的库,设置权限为 admin
set role admin;
连接测试:
连接你绑定的地址并根据提示输入 Hadoop 核心配置文件中指定的用户与其密码。
beeline
!connect jdbc:hive2://master:10000
根据提示输入账号密码(默认都为空,直接按回车跳过即可)
连接时出现错误:User: xxx is not allowed to impersonate anonymous (state=08S01,code=0)
,显示该用户不被允许连接,这是因为在 Hadoop 的核心配置文件 core-site.xml
中没有指定该用户(上方有添加用户模板)或者指定后 Hadoop 集群没有重启,导致配置没有生效。
如果你在通过 hiveserver2 服务远程插入数据时出现如下错误:FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.StatsTask
解决方法:
在插入的目标库中设置属性 set hive.stats.autogather=false;
,关闭配置自动统计列的统计信息。
使用 hiveserver2 服务时异常停止,JVM 内存溢出:
FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. Java heap space Exception in thread "HiveServer2-Handler-Pool: Thread-652" java.lang.OutOfMemoryError: GC overhead limit exceeded
解决方法:
修改 Hive 中 conf 目录下的 hive-env.sh
文件,将 export HADOOP_HEAPSIZE=1024
进行调整,可以修改为 4096
,视情况而定;
保存退出,重新启动服务就可以啦。
可以看我写的这篇文章:Hive 表注释乱码解决