A4--Hive部署

发布时间 2023-04-04 13:46:45作者: Jerry·

一、版本信息

 
 
JDK 1.8
Hive 3.1.3
MySQL 8.0.30

二、安装部署Mysql

参考地址:离线安装MySql8.0(主从模式)

三、安装部署Hive

1. 安装准备

1) 把 apache-hive-3.1.3-bin.tar.gz 上传到 linux 的/opt/src 目录下并解压

tar -zxvf /opt/src/apache-hive-3.1.3-bin.tar.gz

2) 修改  apache-hive-3.1.3-bin 的名称为  hive-3.1.3

mv /opt/src/apache-hive-3.1.3-bin /data/hive-3.1.3

3) 修改/etc/profile.d/my_env.sh, 添加环境变量

vim /etc/profile.d/my_env.sh

4) 添加内容

# HIVE
export HIVE_HOME=/data/hive-3.1.3
export PATH=$PATH:$HIVE_HOME/bin

5) 解决 guava Jar 包冲突

mv $HIVE_HOME/lib/guava-19.0.jar $HIVE_HOME/lib/guava-19.0.jar.bak

6) 解决日志 Jar 包冲突

mv $HIVE_HOME/lib/log4j-slf4j-impl-2.17.1.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.17.1.jar_bak

2.  配置元数据到 MySQL

1) 拷贝驱动

# 将 MySQL 的 JDBC 驱动拷贝到 Hive 的 lib 目录下
cp mysql-connector-java-8.0.30.jar $HIVE_HOME/lib/mysql-connector-java-8.0.30.jar

2) 配置 Metastore 到 MySQL

vim $HIVE_HOME/conf/hive-site.xml

添加如下内容

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 
<configuration>
 
  <!-- jdbc 连接的 URL -->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://192.168.0.0:3306/metastore?useSSL=false</value>
  </property>
 
  <!-- jdbc 连接的 Driver-->
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.jdbc.Driver</value>
  </property>
 
  <!-- jdbc 连接的 username-->
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>username</value>
  </property>
 
  <!-- jdbc 连接的 password -->
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>password</value>
  </property>
 
  <!-- Hive 元数据存储版本的验证 -->
  <property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
  </property>
 
  <!--元数据存储授权-->
  <property>
    <name>hive.metastore.event.db.notification.api.auth</name>
    <value>false</value>
  </property>
 
  <!-- Hive 默认在 HDFS 的工作目录 -->
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
  </property>
 
  <!-- 指定存储元数据要连接的地址-->
  <property>
    <name>hive.metastore.uris</name>
    <value>thrift://hive01:9083</value>
  </property>
 
  <!-- 指定 hiveserver2 连接的 host -->
  <property>
    <name>hive.server2.thrift.bind.host</name>
    <value>hive01</value>
  </property>
 
  <!-- 指定 hiveserver2 连接的端口号 -->
  <property>
    <name>hive.server2.thrift.port</name>
    <value>10000</value>
  </property>
 
  <!-- 打印表头信息-->
  <property>
    <name>hive.cli.print.header</name>
    <value>true</value>
  </property>
 
  <!-- 打印当前库信息-->
  <property>
    <name>hive.cli.print.current.db</name>
    <value>true</value>
  </property>
 
</configuration>

3) 登陆 MySQL, 新建 Hive 元数据库

mysql> create database metastore;
mysql> quit;

4) 初始化 Hive 元数据库

schematool -initSchema -dbType mysql -verbose

3. 使用 JDBC 方式访问 Hive

1) 启动 metastore

hive --service metastore

2)启动 hiveserver2

hive --service hiveserver2

3)启动 beeline 客户端(需要多等待一会)

bin/beeline -u jdbc:hive2://hive01:10000 -n root

4) 编写 hive 服务启动脚本

vim  $HIVE_HOME/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 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 服务运行异常"
    ;;
 
*)
    echo Invalid Args!
    echo 'Usage: '$(basename $0)' start|stop|restart|status'
    ;;
 
esac

添加执行权限

chmod +x $HIVE_HOME/bin/hiveservices.sh

启动 Hive 后台服务

hiveservices.sh start