前言版本Hive与Hadoop版本下载解压配置复制配置文件配置hive-env.sh,添加Hadoop环境变量配置hive-site.xml,配置MySQL相关信息下载MySQL驱动在MySQL上创建Hive的源数据存储库初始化Hive报错1:解决log4j冲突报错2:报错字符不合法再次执行初始化Hive发送到其他节点使用Hive报错集合报错:jdk版本报错:java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir
前言
关于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 |
下载
解压
# 解压 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
查看目录结构
- 配置文件模板
- 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, 2022 ,Hive只支持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驱动
- 查看MySQL版本
root@redis01:/usr/local/hive/conf# mysql -V mysql Ver 8.0.30-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu))
- 去maven官网下载mysql 8.0.30的JDBC驱动
- 移动 jar包 到
hive/lib
目录下
在MySQL上创建Hive的源数据存储库
create database hive;
初始化Hive
# hive/bin目录下 root@redis01:/usr/local/hive/bin# ./schematool -initSchema -dbType mysql
报错1:解决log4j冲突
# hive/lib目录下 root@redis01:/usr/local/hive/lib# rm -rf log4j-slf4j-impl-2.17.1.jar
报错2:报错字符不合法
- 解决定位到改行,删除
再次执行初始化
执行完后会生成一些表
root@redis01:~# mysql mysql> use hive mysql> show tables;
Hive发送到其他节点
root@redis01:/usr/local# xsync hive
使用Hive
# 启动hive root@redis01:/usr/local/hive/bin# ./hive
报错集合
报错:jdk版本
关于
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
参考