【误闯大数据】【从安装到入门】Hive部署

490 阅读3分钟
作者 日期 天气
元公子 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&amp;useUnicode=true&amp;serverTimezone=Asia/Shanghai&amp;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这个地方,删除&#8;字符

附录: