Hive安装

访问Hive获取下载安装地址

安装

  • 创建downloads文件夹并下载Hive
1
2
hadoop@M5303398:~$ mkdir downloads
hadoop@M5303398:~/downloads$ wget https://downloads.apache.org/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
  • 解压apache-hive-3.1.2-bin.tar.gzhive目录
1
hadoop@M5303398:~/downloads$ tar xzf apache-hive-3.1.2-bin.tar.gz -C ~/hive
  • 配置Hive的环境变量(bashrc)
1
hadoop@M5303398:~$ sudo nano .bashrc
  • 修改环境变量
1
2
export HIVE_HOME=~/hive/apache-hive-3.1.2-bin
export PATH=$PATH:$HIVE_HOME/bin
  • 刷新.hashrc
1
hadoop@M5303398:~$ source ~/.bashrc
  • 修改hive-config.sh
1
sudo nano $HIVE_HOME/bin/hive-config.sh
  • 添加HADOOP_HOME
1
export HADOOP_HOME=/home/hdoop/hadoop-3.2.1

在HDFS中创建配置单元目录

  • 创建两个单独的目录以将数据存储在HDFS层中:
    • 临时的tmp目录将存储Hive进程的中间结果
    • warehouse仓库目录将存储与Hive相关的表。
  • 创建tmp目录,该目录将存储Hive发送到HDFS的中间数据
1
hdfs dfs -mkdir /tmp
  • 为tmp组成员添加写和执行权限
1
hdfs dfs -chmod g+w /tmp
  • 检查权限是否正确添加
1
hdfs dfs -ls /
  • 创建仓库目录warehouse
  • /user/hive/父目录中创建仓库目录
1
hdfs dfs -mkdir -p /hadoop/hive/warehouse
  • 为仓库组成员添加写入和执行权限
1
hdfs dfs -chmod g+w /hadoop/hive/warehouse
  • 检查权限是否添加正确
1
hdfs dfs -ls /hadoop/hive

配置 hive-site.xml 文件

  • 默认情况下,Apache Hive发行版包含模板配置文件。模板文件位于Hive conf目录中,并概述了默认的Hive设置。 使用以下命令找到正确的文件
1
cd $HIVE_HOME/conf
  • 使用hive-default.xml.template创建hive-site.xml文件
1
cp hive-default.xml.template hive-site.xml
  • 使用nano文本编辑器访问hive-site.xml文件
1
sudo nano hive-site.xml

FAQ

  • HiveSchemaTool:Parsing failed. Reason: Missing required option

    • 将命令替换为(修改-dbType 和 -initSchema的顺序)
    1
    $HIVE_HOME/bin/schematool -dbType derby -initSchema
  • Exception in thread “main” java.lang.NoSuchMethodError:

    • 该错误表明Hadoop和Hive版本之间很可能存在不兼容性问题
    • 在Hive lib目录中找到guava jar文件
    1
    ls $HIVE_HOME/lib
    • 在Hadoop lib目录中也找到guava jar文件
    1
    ls $HADOOP_HOME/share/hadoop/hdfs/lib
    • 列出的两个版本不兼容,并导致该错误。从Hive lib目录中删除现有的guava文件
    1
    rm $HIVE_HOME/lib/guava-19.0.jar
    • 将guava文件从Hadoop lib目录复制到Hive lib目录
    1
    cp $HADOOP_HOME/share/hadoop/hdfs/lib/guava-27.0-jre.jar $HIVE_HOME/lib/
    • 再次使用 schematool 命令启动 Derby 数据库
    1
    $HIVE_HOME/bin/schematool -dbType derby -initSchema
  • Hive throws: WstxParsingException: Illegal character entity: expansion character (code 0x8)

    • 之所以引发该错误,是因为单词fortransactional之间有一个特殊字符()。删除该字符或复制并粘贴(替换)介于<description></description>之间的字符。
    • 修改类型for&#8;transactionalfor transactional
  • Exception in thread “main” java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to class java.net.URLClassLoader

    • 确保.bashrc中修改的内容是正确的
    1
    2
    3
    #Hive Related Options
    export HIVE_HOME=~/hive/apache-hive-3.1.2-bin
    export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/bin
    • Hive目前不支持Java 9+,如果Java版本高于9+,需要安装并配置JAVA8

      • 根据本地包
      1
      sudo apt-get update
      • 安装JAVA 8
      1
      sudo apt-get install openjdk-8-jdk
      • 查看JAVA 8的版本
      1
      hadoop@M5303398:~$ cd /usr/lib/jvm
      • 修改hadoop-env.sh
      1
      hadoop@M5303398:~$ vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh
      • 配置JAVA_HOME
      1
      JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    • 输入hive查看

  • Exception in thread “main” java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D

    • 这是因为hive-site.xml缺少system:java.io.tmpdirsystem:user.name
    • 将下面的内容添加到hive-site.xml开头
    1
    2
    3
    4
    5
    6
    7
    8
    <property>
    <name>system:java.io.tmpdir</name>
    <value>/tmp/hive/java</value>
    </property>
    <property>
    <name>system:user.name</name>
    <value>${user.name}</value>
    </property>

引用