4.1 hive安装
1、把apache-hive~bin.tar.gz上传到linux的/opt/software目录下
2、将/opt/software/目录下的apache-hive~bin.tar.gz到/opt/module/目录下面
[atguigu@hadoop102 software]$ tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module/
3、修改解压后的目录名称为hive
[atguigu@hadoop102 module]$ mv apache-hive-3.1.2-bin/ /opt/module/hive
4、修改/etc/profile.d/my_env.sh文件,将Hive的/bin目录添加到环境变量
[atguigu@hadoop102 hive]$ sudo vim /etc/profile.d/my_env.sh
……
#HIVE_HOME
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin
[atguigu@hadoop102 hive]$ source /etc/profile
5、在hive根目录下,使用/bin目录中的schematool命令初始化hive自带的derby元数据库
[atguigu@hadoop102 hive]$ bin/schematool -dbType derby -initSchema
6、执行上述初始化元数据库时,会发现存在jar包冲突问题,现象如下
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/module/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/module/hadoop-3.1.3/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL: jdbc:derby:;databaseName=metastore_db;create=true
Metastore Connection Driver : org.apache.derby.jdbc.EmbeddedDriver
Metastore connection User: APP
Starting metastore schema initialization to 3.1.0
Initialization script hive-schema-3.1.0.derby.sql
解决jar冲突问题,只需要将hive的/lib目录下的log4j-slf4j-impl-2.10.0.jar重命名即可
[atguigu@hadoop102 hive]$ mv lib/log4j-slf4j-impl-2.10.0.jar lib/log4j-slf4j-impl-2.10.0.back
4.2 将hive元数据配置到mysql
4.2.1 拷贝驱动
将mysql的jdbc驱动拷贝到hive的lib目录下
[atguigu@hadoop102 software]$ cp mysql-connector-java-5.1.37.jar /opt/module/hive/lib
4.2.2 配置metastore到mysql
在$hive_home/conf目录下新建hive-site.xml文件
[atguigu@hadoop102 hive]$ vim conf/hive-site.xml
添加如下内容
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- jdbc连接的URL -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false</value>
</property>
<!-- jdbc连接的Driver-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- jdbc连接的username-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- jdbc连接的password -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>你的密码</value>
</property>
<!-- Hive默认在HDFS的工作目录 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<!-- Hive元数据存储的验证 -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<!-- 元数据存储授权 -->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
</configuration>
这个配置文件的主要作用是设置 Hive 与其元数据存储(通常是一个 RDBMS,如 MySQL)的连接配置,定义 Hive 在 HDFS 中的存储位置,以及配置一些与元数据和安全性相关的选项。
4.2.3 hive初始化元数据库
1、登录mysql
[atguigu@hadoop102 module]$ mysql -uroot -p你的密码
2、新建hive元数据库
mysql> create database metastore;
mysql> quit;
3、初始化hive元数据库
[atguigu@hadoop102 hive]$ bin/schematool -initSchema -dbType mysql -verbose
4.2.4 启动hive
1、启动hive客户端
[atguigu@hadoop102 hive]$ bin/hive
2、查看一下数据库
hive (default)> show databases;
OK
database_name
default
4.2.5 修改元数据库字符集
hive元数据库的字符集默认为latin1,由于其不支持中文字符,故若建表语句中包含中文注释,会出现乱码现象。如需要解决乱码问题,需做一下修改。
1、修改hive元数据库中存储注释的字符的字符集为utf-8
1)字段注释
mysql> alter table metastore.COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
2)表注释
mysql> alter table metastore.TABLE_PARAMS modify column PARAM_VALUE mediumtext character set utf8;
2、修改hive-site.xml中jdbc url,如下
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false&useUnicode=true&characterEncoding=UTF-8</value>
</property>