| 作者 | 日期 | 天气 |
|---|---|---|
| 元公子 | 2020-01-27(周一) | 下雨后风大的东莞 |
你知道的越少,你不知道的就越少
没有朋友的点赞,就没法升级打怪
一、环境准备
- 示例使用Centos7 64位操作系统
- Java 1.8以上环境
- 已安装Hadoop环境
- 已存在MySQL环境
二、下载安装包
官方地址:前往下载页
下载最新版软件:apache-hive-3.1.2-bin.tar.gz
三、开始安装
创建安装目录
[root@hadoop-master /soft]# tar -xvzf apache-hive-3.1.2-bin.tar.gz
[root@hadoop-master /soft]# chown -R hadoop:hadoop apache-hive-3.1.2-bin
[root@hadoop-master /soft]# ln -s apache-hive-3.1.2-bin hive
设置环境变量
[root@hadoop-master /soft]# vi /etc/profile
export HIVE_HOME=/soft/hive
export HIVE_CONF_DIR=/home/hadoop/hive/conf
export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/hcatalog/sbin:$HIVE_HOME/hcatalog/bin
[root@hadoop-master /soft]# source /etc/profile
创建配置和暂存等目录文件夹
[root@hadoop-master /soft]# su - hadoop
[hadoop@hadoop-master /home/hadoop]$ mkdir -p /home/hadoop/hive/conf
[hadoop@hadoop-master /home/hadoop]$ mkdir -p /home/hadoop/hive/tmp
[hadoop@hadoop-master /home/hadoop]$ cp -fr /soft/hive/conf/* /home/hadoop/hive/conf/
改改配置文件
[hadoop@hadoop-master /home/hadoop]$ cp /home/hadoop/hive/conf/hive-default.xml.template /home/hadoop/hive/conf/hive-site.xml
[hadoop@hadoop-master /home/hadoop]$ cp /home/hadoop/hive/conf/hive-env.sh.template /home/hadoop/hive/conf/hive-env.sh
[hadoop@hadoop-master /home/hadoop]$ vi /home/hadoop/hive/conf/hive-site.xml
# <configuration>下直接新增
<property>
<name>system:java.io.tmpdir</name>
<value>/home/hadoop/hive/tmp</value>
</property>
<property>
<name>system:user.name</name>
<value>hive</value>
</property>
# 以下为修改
# 找到<name>javax.jdo.option.ConnectionDriverName</name>项,调整为mysql配置,mysql-connector-java 8驱动
<!-- mysql 配置 -->
<name>javax.jdo.option.ConnectionDriverName</name>
<!--<value>org.apache.derby.jdbc.EmbeddedDriver</value>-->
<value>com.mysql.cj.jdbc.Driver</value>
<name>javax.jdo.option.ConnectionURL</name>
<!--<value>jdbc:derby:;databaseName=metastore_db;create=true</value>-->
<value>jdbc:mysql://db1:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8</value>
<name>javax.jdo.option.ConnectionUserName</name>
<!-- <value>APP</value> -->
<value>root</value>
<name>javax.jdo.option.ConnectionPassword</name>
<!-- <value>mine</value> -->
<value>123456</value>
# 增加hadoop环境变量
[hadoop@hadoop-master /home/hadoop]$ vi /home/hadoop/hive/conf/hive-env.sh
# HADOOP_HOME=${bin}/../../hadoop
export HADOOP_HOME=/soft/hadoop
export HIVE_CONF_DIR=/home/hadoop/hive/conf
把外部的mysql驱动包考入lib目录下
[hadoop@hadoop-master /home/hadoop]$ mv /soft/mysql-connector-java-8.0.18.jar /soft/hive/lib/
[hadoop@hadoop-master /home/hadoop]$ ll /soft/hive/lib/mysql-connector-java-8.0.18.jar
-rw-rw-r--. 1 hadoop hadoop 2330539 1月 26 15:35 mysql-connector-java-8.0.18.jar
准备启动
# 按官网的要求来整
[hadoop@hadoop-master /home/hadoop]$ hadoop fs -mkdir -p /tmp/hive
[hadoop@hadoop-master /home/hadoop]$ hadoop fs -mkdir -p /user/hive/warehouse
[hadoop@hadoop-master /home/hadoop]$ hadoop fs -chmod -R 777 /tmp/hive
[hadoop@hadoop-master /home/hadoop]$ hadoop fs -chmod -R 777 /user/hive/warehouse
# 这里直接启动可能会有异常,请按第五节的方法,保持与hadoop的guava版本一致。
# Hive CLI 模式启动
[hadoop@hadoop-master /home/hadoop]$ hive
hive> exit;
# HiveServer2 and Beeline 模式启动
# 初始化数据到mysql库
[hadoop@hadoop-master /home/hadoop]$ schematool -initSchema -dbType mysql
Initialization script completed
schemaTool completed
[hadoop@hadoop-master /home/hadoop]$ hiveserver2
[hadoop@hadoop-master /home/hadoop]$ beeline -u jdbc:hive2://localhost:10000
0: jdbc:hive2://> !exit
四、服务自启动
[hadoop@hadoop-master /home/hadoop]$ su - root
[root@hadoop-master /root]# vi /etc/init.d/hive
#!/bin/sh
# chkconfig: 345 85 15
# description: service for hive
# processname: hive
case "$1" in
start)
echo "Starting hive"
su - hadoop -c 'nohup /soft/hive/bin/hive --service hiveserver2 -hiveconf hive.server2.thrift.port=10000 >/dev/null 2>&1 &'
echo "Hive started"
;;
stop)
echo "Stopping hive"
PID_COUNT=`ps aux |grep hiveserver2 |grep -v grep | wc -l`
PID=`ps aux |grep hiveserver2 |grep -v grep | awk {'print $2'}`
if [ $PID_COUNT -gt 0 ];then
echo "Try stop hive"
kill -9 $PID
echo "Kill hive SUCCESS!"
else
echo "There is no hive!"
fi
;;
restart)
echo "Restarting hive"
$0 stop
$0 start
;;
status)
PID_COUNT=`ps aux |grep hiveserver2 |grep -v grep | wc -l`
if [ $PID_COUNT -gt 0 ];then
echo "hive is running"
else
echo "hive is stopped"
fi
;;
*)
echo "Usage:$0 {start|stop|restart|status}"
exit 1
esac
执行保存: Esc :wq
[root@hadoop-master /root]# chmod 755 /etc/init.d/hive
[root@hadoop-master /root]# chkconfig --add hive
[root@hadoop-master /root]# chkconfig hive on
[root@hadoop-master /root]# service hive start
[root@hadoop-master /root]$ jps
13771 RunJar
[root@hadoop-master /root]# netstat -ntulp |grep 10000
tcp6 0 0 :::10000 :::* LISTEN 14173/java
五、偶遇的坑
- Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
hadoop 与hive的guava版本不一致,删除其中低版本。
[hadoop@hadoop-master /home/hadoop]$ ll /soft/hadoop/share/hadoop/common/lib/guava*
-rw-r--r--. 1 hadoop hadoop 2747878 9月 10 23:58 /soft/hadoop/share/hadoop/common/lib/guava-27.0-jre.jar
[hadoop@hadoop-master /home/hadoop]$ ll /soft/hive/lib/guava*
-rw-r--r--. 1 hadoop hadoop 2308517 9月 27 2018 /soft/hive/lib/guava-19.0.jar
[hadoop@hadoop-master /home/hadoop]$ rm -f /soft/hive/lib/guava-19.0.jar
[hadoop@hadoop-master /home/hadoop]$ cp /soft/hadoop/share/hadoop/common/lib/guava-27.0-jre.jar /soft/hive/lib/
- Exception in thread "main" java.lang.RuntimeException: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x8
/home/hadoop/hive/conf/hive-site.xml文件中,定位Ensures commands with OVERWRITE这个地方,删除字符