https://hive.apache.org/
注意:Hive需要在NodeNode所在节点安装!
[hadoop@hadoop102 software]$ tar -zxvf /opt/software/apache-hive-3.1.2-bin.tar.gz -C /opt/module/
[hadoop@hadoop102 apache-hive-3.1.2-bin]$ sudo vim /etc/profile.d/my_env.sh
新增内容:
#HIVE_HOME
export HIVE_HOME=/opt/module/apache-hive-3.1.2-bin
export PATH=$PATH:$HIVE_HOME/bin
使环境变量生效:
[hadoop@hadoop102 apache-hive-3.1.2-bin]$ source /etc/profile.d/my_env.sh
hive元数据概述:记录了hive中表的名称、列名、数据类型、分区信息、数据存储路径等。
hive元数据存储:默认是元数据存储于hive内置的derby数据库,是用Java写的。一定要切换到MySQL,内嵌derby局限性太高!当一个hive客户端启动时,就会独占derby元数据库且不与其他客户端共享元数据,所以无法同时开启多个hive客户端进行操作!
[hadoop@hadoop102 ~]$ vim $HIVE_HOME/conf/hive-site.xml
新增内容:
<configuration>
<property>
<name>javax.jdo.option.ConnectionURLname>
<value>jdbc:mysql://mall:3306/metastore?useSSL=falsevalue>
property>
<property>
<name>javax.jdo.option.ConnectionDriverNamename>
<value>com.mysql.jdbc.Drivervalue>
property>
<property>
<name>javax.jdo.option.ConnectionUserNamename>
<value>rootvalue>
property>
<property>
<name>javax.jdo.option.ConnectionPasswordname>
<value>123456value>
property>
<property>
<name>hive.metastore.warehouse.dirname>
<value>/warehousevalue>
property>
<property>
<name>hive.metastore.schema.verificationname>
<value>falsevalue>
property>
<property>
<name>hive.metastore.event.db.notification.api.authname>
<value>falsevalue>
property>
configuration>
[hadoop@hadoop102 ~]$ cp /opt/software/mysql-connector-java-5.1.37.jar $HIVE_HOME/lib
[mall@mall ~]$ mysql -uroot -p123456
mysql> create database metastore;
mysql> quit;
-verbose参数:显示初始化过程日志
-dbType:指定数据库类型
[hadoop@hadoop102 ~]$ schematool -initSchema -dbType mysql -verbose
metastore服务用于访问hive元数据。有两种提供服务的方式,分别是嵌入式模式和独立服务模式。
生产中使用独立服务模式,因为在嵌入式模式下,每个Hive CLI都需要直接连接元数据库,当Hive CLI较多时,数据库压力会比较大。
如果配置文件中有此项配置,说明hive在连接元数据的时候需要走第三方服务thrift,必须启动独立服务模式metastore服务!
[hadoop@hadoop102 ~]$ vim $HIVE_HOME/conf/hive-site.xml
新增内容:
<property>
<name>hive.metastore.urisname>
<value>thrift://hadoop102:9083value>
property>
# 启动
[hadoop@hadoop102 ~]$ nohup hive --service metastore &>/dev/null 2>/dev/null &
# 关闭
[hadoop@hadoop102 ~]$ ps -ef | grep metastore
[hadoop@hadoop102 ~]$ kill 28832
[hadoop@hadoop102 ~]$ vim $HIVE_HOME/conf/hive-site.xml
新增内容:
<property>
<name>hive.server2.thrift.bind.hostname>
<value>hadoop102value>
property>
<property>
<name>hive.server2.thrift.portname>
<value>10000value>
property>
# 启动
[hadoop@hadoop102 apache-hive-3.1.2-bin]$ nohup bin/hive --service hiveserver2 &>/dev/null 2>/dev/null &
# 关闭
[hadoop@hadoop102 ~]$ ps -ef | grep hiveserver2
[hadoop@hadoop102 ~]$ kill 29204
[hadoop@hadoop102 ~]$ cd /opt/module/apache-hive-3.1.2-bin/
[hadoop@hadoop102 apache-hive-3.1.2-bin]$ bin/hive
查看数据库:
hive> show databases;
OK
default
Time taken: 0.756 seconds, Fetched: 1 row(s)
-u参数:hiveserver2所在ip和端口号
-n参数:账号
[hadoop@hadoop102 apache-hive-3.1.2-bin]$ bin/beeline -u jdbc:hive2://hadoop102:10000 -n hadoop
Hive元数据库字符集默认是Latin1,如果建表语句中有中文注释,会出现乱码现象。
以utf-8编码向元数据库中写入数据
mysql -uroot -p
use metastore;
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table TABLE_PARAMS modify column PARAM_VALUE mediumtext character set utf8;
以utf-8编码从元数据库中读取数据
[hadoop@hadoop102 ~]$ vim $HIVE_HOME/conf/hive-site.xml
修改内容:
<property>
<name>javax.jdo.option.ConnectionURLname>
<value>jdbc:mysql://mall:3306/metastore?useSSL=false&useUnicode=true&characterEncoding=UTF-8value>
property>
将HDFS文件包装成hive中的表