Hive2:搭建

Hive2:搭建

前言

关于hive存储元数据有三种模式,如下,具体详解参考:Hive的Metastore三种配置方式分析
  • 内嵌模式:元数据保持在内嵌的derby模式,只允许一个会话连接(默认hive带的数据库)
  • 本地独立模式:在本地安装Mysql,把元据放到mySql内
  •  远程模式:元数据放置在远程的Mysql数据库

版本

Hive与Hadoop版本

JDK
目前只支持到jdk1.8
Hadoop
3.3.2
Hive
3.1.3
MySQL
8.0.30

下载

notion image
notion image

解压

# 解压 root@redis01:/usr/local# tar -zxvf apache-hive-3.1.3-bin.tar.gz # 重命名 root@redis01:/usr/local# mv apache-hive-3.1.3-bin hive
查看目录结构
notion image
notion image
  • 配置文件模板
    • hive-default.xml.template
    • hive-env.sh.template

配置

复制配置文件

# 复制配置文件 root@redis01:/usr/local/hive/conf# cp hive-default.xml.template hive-site.xml root@redis01:/usr/local/hive/conf# cp hive-env.sh.template hive-env.sh

配置hive-env.sh,添加Hadoop环境变量

root@redis01:/usr/local/hive/conf# vim hive-env.sh
添加Hadoop环境变量
  • 📢📢📢后续发现到目前Sep 4, 2022Hive只支持java8
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export HIVE_HOME=/usr/local/hive export HADOOP_HOME=/usr/local/hadoop
上述操作是设置Hadoop环境变量,作用是无论系统是否配置Hadoop环境变量,在Hive执行时,一定能够通过hive-env.sh配置文件去加载Hadoop环境变量,由于在部署Hadoop集群时已经配置了全局Hadoop环境变量,因此可以不设置该参数。

配置hive-site.xml,配置MySQL相关信息

安装mysql作为hive的Metastore(主节点安装即可
root@redis01:/usr/local/hive/conf# vim hive-site.xml
配置MySQL相关信息,远程用hive连接数据库,主要修改hive里的四个配置文件
  • 连接mysql,并且在mysql里面创建metastore数据库
  • 添加mysql驱动路径到hive中,前提是已在hive的lib目录下,上传了mysql连接驱动的jar包
  • hive连接mysql数据库的账户和密码
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://redis01:3306/hive?createDatabaseIfNotExist=true</value> <description>Mysql连接协议:JDBC connect string for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>JDBC连接驱动:Driver class name for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>my_user</value> <description>username to use against metastore database</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> <description>password to use against metastore database</description> </property> <!-- 新建临时目录/hive/tmp,最后添加 --> <property>     <name>system:java.io.tmpdir</name>     <value>/usr/local/hive/tmp</value> </property>

下载MySQL驱动

  1. 查看MySQL版本
root@redis01:/usr/local/hive/conf# mysql -V mysql Ver 8.0.30-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu))
  1. 去maven官网下载mysql 8.0.30的JDBC驱动
notion image
  1. 移动 jar包 到hive/lib 目录下

在MySQL上创建Hive的源数据存储库

create database hive;

初始化Hive

# hive/bin目录下 root@redis01:/usr/local/hive/bin# ./schematool -initSchema -dbType mysql

报错1:解决log4j冲突

notion image
# hive/lib目录下 root@redis01:/usr/local/hive/lib# rm -rf log4j-slf4j-impl-2.17.1.jar

报错2:报错字符不合法

  • 解决定位到改行,删除
notion image

再次执行初始化

notion image
执行完后会生成一些表
root@redis01:~# mysql mysql> use hive mysql> show tables;
notion image

Hive发送到其他节点

root@redis01:/usr/local# xsync hive

使用Hive

# 启动hive root@redis01:/usr/local/hive/bin# ./hive
notion image

报错集合

报错:jdk版本

notion image
关于ClassLoaders$AppClassLoader cannot be cast to class java.net.URLClassLoader ,是因为HIVE与JAVA的版本不同导致的。
Hive目前只支持到Java 8,如果你安装或者配置JAVA_HOME 是JAVA11或者以上就会出现这样的错误。
目前官方还没有出支持JAVA11 的HIVE,所以暂时的解决方案是安装JAVA 8并在hadoop-env.sh配置JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

报错:java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir

原因:在hive-site.xml配置文件中需要配置system:java.io.tmpdir属性。
解决
创建目录/usr/local/hive/tmp
# 创建文件夹 root@redis01:/usr/local/hive# mkdir tmp # 修改配置 root@redis01:/usr/local/hive/conf# vim hive-site.xml
方式一:
# 修改<value>${system:java.io.tmpdir}/${system:user.name}</value> <property> <name>hive.exec.local.scratchdir</name> <value>/usr/local/hive/tmp/${user.name}</value> <description>Local scratch space for Hive jobs</description> </property> #最后添加 <property>     <name>system:java.io.tmpdir</name>     <value>/usr/local/hive/tmp</value> </property>
方式二:
将配置文件中所有的${system:java.io.tmpdir}更改为 /home/hive/tmp (如果没有该文件则创建),将 ${system:user.name}更改为 root
 
参考
从零开始搭建个人大数据集群(4)--HIVE 3.1.2安装
从零开始搭建个人大数据集群--环境准备篇 从零开始搭建个人大数据集群(1)--zookeeper 从零开始搭建个人大数据集群(2)--HDFS 从零开始搭建个人大数据集群(3)--YARN 1.参考我上面的文章安装好zookeeper和hadoop 2.准备好apache-hive-3.1.2-bin.tar.gz 3.选择一台服务器安装好MySQL,我安装的版本是MySQL5.7.34 cd /opt/packages tar -zxf apache-hive-3.1.2-bin.tar.gz -C ../apps ln -s apache-hive-3.1.2-bin hive JAVA_HOME=/usr/local/jdk ZOOKEEPER_HOME=/opt/apps/zookeeper HADOOP_HOME=/opt/apps/hadoop HADOOP_COMMON_HOME=${HADOOP_HOME} HADOOP_HDFS_HOME=${HADOOP_HOME} HADOOP_MAPRED_HOME=${HADOOP_HOME} HADOOP_YARN_HOME=${HADOOP_HOME} HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:/usr/lib64 HIVE_HOME=/opt/apps/hive HIVE_CONF_DIR=${HIVE_HOME}/conf export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin hive-site.xml可以直接下载我配置好的文件,在此基础上修改 hive-site.xml cd /opt/apps/hive/conf cp hive-default.xml.template hive-site.xml mv hive-env.sh.template hive-env.sh mv hive-log4j2.properties.template hive-log4j2.properties 主要是需要改数据库以及hdfs相关配置,可以根据name标签值在我上传的hive-site.xml文件里查找修改为你自己想要的配置,hive-site.xml原始文件中第3125行有错误,在我的文件中我直接删掉了那一行 javax.jdo.option.ConnectionURL jdbc:mysql://hd5:3306/hive_meta mysql连接 javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver mysql驱动 javax.jdo.option.ConnectionUserName hive 数据库使用用户名 javax.jdo.option.ConnectionPassword 000000 数据库密码 hive.metastore.warehouse.dir /hive/warehouse hive使用的HDFS目录 hive.metastore.schema.verification false metastore start 在客户端使用时,mysql连接和metastore同时出现在配置文件中,客户端会选择使用metastore hive.metastore.uris thrift://hd1:9083 metastore服务器URL hive.server2.authentication NONE 身份验证模式,默认为NONE。选项为NONE(使用普通SASL),NOSASL,KERBEROS,LDAP,PAM和CUSTOM。 hive.server2.thrift.bind.host hd1 hive开启的thriftServer地址 hive.server2.thrift.port 10000 hive开启的thriftServer端口 hive.server2.enable.doAs true 默认情况下(true),HiveServer2以提交查询的用户身份执行查询处理。但是,如果将以下参数设置为false,则查询将作为hiveserver2进程运行的用户运行。 datanucleus.autoCreateSchema false creates necessary schema on a startup if one doesn't exist.
从零开始搭建个人大数据集群(4)--HIVE 3.1.2安装