介绍
Hive 是一个建立在 Hadoop 之上的数据仓库工具,它用于提供数据的查询和分析功能。Hive 允许用户使用类似 SQL 的查询语言(HiveQL)来处理存储在 Hadoop 分布式文件系统(HDFS)上的大规模数据。
数据存储和管理: Hive 提供了一种方式来组织和管理存储在 Hadoop 中的海量数据,使得数据的访问和查询变得简单。
数据分析: Hive 使得非程序员也能轻松进行数据分析,用户可以使用 SQL 的查询语言而无需复杂编程。
支持大数据处理: Hive 可以处理有结构、半结构和无结构的数据,是大数据技术生态系统的一部分。
可扩展性: Hive 可以处理非常大的数据集,支持快速扩展并适应数据量的变化。
例子:
想象一下你有一个图书馆,里面有成千上万本书。你想要查找某一类书籍(比如“科幻”或“历史”),或者查找某位作者的作品。
印刷书籍: 每本书就像是一个数据存储单元。
图书管理员: 你作为图书管理员,负责管理这些书籍的分类(结构化数据)和存放位置(HDFS)。
如果你需要查找某个主题的书,使用卡片目录(相当于 HiveQL)就能快速找到所有相关的书籍,而不必翻阅每一本书。这就是 Hive 让数据查询和管理变得简单的原因。
前提准备
需要先将Hadoop全部进程启动
代码语言:shell复制# 解压hive-3.1.3.tar.gz到/opt/module/目录下面
tar -zxvf hive-3.1.3.tar.gz -C /opt/module/
# 修改hive-3.1.3-bin.tar.gz的名称为hive
mv /opt/module/apache-hive-3.1.3-bin/ /opt/module/hive
# 配置环境变量
vim /etc/profile
# HIVE_HOME
export HIVE_HOME=/opt/module/hive
export PATH=:$HIVE_HOME/bin:$PATH
# 使环境变量生效
source /etc/profile
# 解决日志Jar包冲突
cd /opt/module/hive/lib
mv log4j-slf4j-impl-2.17.1.jar log4j-slf4j-impl-2.17.1.jar.bak
Hive元数据配置到MySQL
代码语言:shell复制# 将MySQL的JDBC驱动拷贝到Hive的lib目录下。
cp /opt/software/mysql/mysql-connector-j-8.0.31.jar /opt/module/hive/lib/
配置Metastore到MySQL
在$HIVE_HOME/conf目录下新建hive-site.xml文件
cd $HIVE_HOME/conf
vim hive-site.xml
代码语言:xml复制<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--配置Hive保存元数据信息所需的 MySQL URL地址-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false&useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true</value>
</property>
<!--配置Hive连接MySQL的驱动全类名-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<!--配置Hive连接MySQL的用户名 -->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!--配置Hive连接MySQL的密码 -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>000000</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hadoop102</value>
</property>
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
</configuration>
初始化元数据库
初始化成功标志:
代码语言:shell复制# 登陆MySQL
mysql -uroot -p000000
# 新建Hive元数据库
mysql> create database metastore;
# 退出mysql
mysql> quit;
# 初始化Hive元数据库
schematool -initSchema -dbType mysql -verbose
# 登陆MySQL
mysql -uroot -p000000
# 修改元数据库字符集
# Hive元数据库的字符集默认为Latin1,由于其不支持中文字符,所以建表语句中如果包含中文注释,会出现乱码现象。如需解决乱码问题,须做以下修改。
# 修改Hive元数据库中存储注释的字段的字符集为utf-8。
#(1)字段注释
mysql> use metastore;
mysql> alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
#(2)表注释
mysql> alter table TABLE_PARAMS modify column PARAM_VALUE mediumtext character set utf8;
# 退出mysql
mysql> quit;
启动Hive
任意目录下启动(环境变量的作用)
代码语言:shell复制hive
启动成功标志: