大数据开发之电商数仓(hadoop、flume、hive、hdfs、zookeeper、kafka)-第 4 章:数仓准备

时间:2024-01-22 08:00:10

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&amp;useUnicode=true&amp;characterEncoding=UTF-8</value>
</property>