安装方法绝大部分参考了“尚硅谷Hive”;
报错的,基本上都在DeepSeek上找到了解决办法。
1 Hadoop 安装
需要先安装Hadoop集群, 参考【Hadoop HA安装_hadoop的ha模式安装代码-CSDN博客】
2 Hive 安装
一共有3台机器:zx101,zx102,zx103,hive安装在
【Namenode所在节点(推荐)、资源更多的节点】:前者节省数据在节点之间的传输,后者怕单台机器资源不够,broken。
2.1 下载Hive包
安装包名:apache-hive-4.0.1-bin.tar.gz
阿里云镜像源:阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区
解释:只需要安装在一台节点上,不用xsync到其他节点。
2.2 解压、安装、配置环境变量
# 解压到目标文件夹下
tar -zxvf apache-hive-4.0.1-bin.tar.gz -C /component/
# 修改环境变量(非root用户,命令最前面加'sudo')
cd /etc/profile.d
vim my_env.sh
# 文件末尾新增
#HIVE_HOME
export HIVE_HOME=/component/hive
export PATH=$PATH:$HIVE_HOME/bin
# 使环境变量生效
sudo source /etc/profile
2.3 卸载Derby,安装Mysql作元数据库
安装包名:mysql-5.7.36-1.el6.i686.rpm-bundle.tar
下载地址:mysql-MySQL-5.7安装包下载_开源镜像站-阿里云
安装包名:mysql-connector-java-5.1.49.tar.gz
下载地址:mysql-Connector-J安装包下载_开源镜像站-阿里云
解释:下载的包,解压后把jar包传到Centos即可。
# 没启动过hive,这两行跳过
# 卸载Hive目录下的两个元数据文件
rm -rf derby.log metastore_db
# 删除Hadoop的hdfs上生成的文件夹
hadoop fs -rm -r /user
2.3.1 解压、安装mysql
cd /component/pakages
mkdir mysql_libs
cd ..
tar -xvf mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar -C mysql_libs/
# 卸载自带的mariadb
sudo rpm -qa | grep mariadb | xargs sudo rpm -e --nodeps
cd mysql_libs
# 顺序执行
sudo rpm -ivh mysql-community-common-5.7.36-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-5.7.36-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-compat-5.7.36-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-client-5.7.36-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-server-5.7.36-1.el7.x86_64.rpm
# Done
2.3.2 登录并修改mysql的一些配置
# 先启动mysql服务,由于不是root用户,要输入密码,要等小1分钟
service mysqld start
# 并查看状态
service mysqld status
# 查看mysql的临时密码,注意有没有空格,空格也是密码字符之一哦
sudo cat /var/log/mysqld.log # 找到temporary:+ji>#Kl1../-
su
123456
mysql -uroot -p
password: # 粘贴到这里,然后就进来了
-- 修改临时密码,
alter user 'root'@'localhost' identified by 'ZengXiao@123';
set global validate_password_policy=0; -- 密码规则搞简单点
set global validate_password_length=4;
alter user 'root'@'localhost' identified by '123456';
-- 设置mysql的root用户可以远程登录
use mysql;
select host, user from user;
update user set host = '%' where user = 'root';
flush privileges; -- 刷新生效
exit
2.3.3 配置Hive元数据存储到MySQL
# 在mysql中新增一个schema
> create database metastore;
> quit;
# 把mysql的jdbc驱动复制到Hive/lib文件夹下
cp mysql-connector-java-5.1.49.jar /component/hive/lib/
2.3.4 新增hive-site.xml
vim hive/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://zx101: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>
<!-- 指定hiveserver2连接的host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>zx101</value>
</property>
<!-- 指定hiveserver2连接的端口号 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<!-- 指定metastore服务的地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://zx101:9083</value>
</property>
</configuration>
2.3.5 初始化hive的mysql
bin/schematool -dbType mysql -initSchema -verbose
2.4 修改hadoop配置,联通hive
2.4.1 core-site.xml
<!--配置所有节点的zengxiao用户都可作为代理用户-->
<property>
<name>hadoop.proxyuser.zengxiao.hosts</name>
<value>*</value>
</property>
<!--配置zengxiao用户能够代理的用户组为任意组-->
<property>
<name>hadoop.proxyuser.zengxiao.groups</name>
<value>*</value>
</property>
<!--配置zengxiao用户能够代理的用户为任意用户-->
<property>
<name>hadoop.proxyuser.zengxiao.users</name>
<value>*</value>
</property>
分发
xsync core-site.xml
2.5 使用Hive
bin/hive --service hiveserver2
bin/beeline -u jdbc:hive2://zx101:10000 -n zengxiao
2.6 配置一键启动Hive
/component/hive/bin/hiveservices.sh
#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs
if [ ! -d $HIVE_LOG_DIR ]
then
mkdir -p $HIVE_LOG_DIR
fi
#检查进程是否运行正常,参数1为进程名,参数2为进程端口
function check_process()
{
pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}')
ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1)
echo $pid
[[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
}
function hive_start()
{
metapid=$(check_process HiveMetastore 9083)
cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &"
[ -z "$metapid" ] && eval $cmd || echo "Metastroe服务已启动"
server2pid=$(check_process HiveServer2 10000)
cmd="nohup hive --service hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"
[ -z "$server2pid" ] && eval $cmd || echo "HiveServer2服务已启动"
}
function hive_stop()
{
metapid=$(check_process HiveMetastore 9083)
[ "$metapid" ] && kill $metapid || echo "Metastore服务未启动"
server2pid=$(check_process HiveServer2 10000)
[ "$server2pid" ] && kill $server2pid || echo "HiveServer2服务未启动"
}
case $1 in
"start")
hive_start
;;
"stop")
hive_stop
;;
"restart")
hive_stop
sleep 2
hive_start
;;
"status")
check_process HiveMetastore 9083 >/dev/null && echo "Metastore服务运行正常" || echo "Metastore服务运行异常"
check_process HiveServer2 10000 >/dev/null && echo "HiveServer2服务运行正常" || echo "HiveServer2服务运行异常"
;;
*)
echo Invalid Args!
echo 'Usage: '$(basename $0)' start|stop|restart|status'
;;
esac
添加执行权限
chmod +x hiveservices.sh
这个名字取得不太好,和同文件夹的其他文件有部分重名,导致tab无法出来
2.7 windows上远程连接hive
【Dbeaver需要下载驱动,让它自己联网下载即可。】
2.8 遇到的一些问题
Windows客户端连接虚拟机的MySQL时, host显示192.168.xx.1
# MySQL没有设置该用户的有其他地址的连接权限
-- 1方法 授权
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
-- 2方法 改表
select host, user from mysql.user where user = 'root'; -- 用户自己选
update mysql.user set host = '%' where user = 'root';
-- 刷新权限
FLUSH PRIVILEGES;
报Public Key Retrieval is not allowed错误
-- 将用户认证方式改为 mysql_native_password
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
# 检查 Hive 的 Guava 版本
ls $HIVE_HOME/lib/guava-*.jar
# 检查 Hadoop 的 Guava 版本
ls $HADOOP_HOME/share/hadoop/common/lib/guava-*.jar
# 如果两者版本不同(如 Hive 使用 guava-19.0.jar,Hadoop 使用 guava-27.0-jre.jar),则需统一版本。
# 删除 Hive 中的旧版 Guava
rm $HIVE_HOME/lib/guava-19.0.jar
# 复制 Hadoop 的 Guava 到 Hive(推荐)
cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib/
# 重试即可
schematool -dbType mysql -initSchema -verbose