Hive必知必会

Hive必知必会

基本概念

Hive是基于Hadoop的一个数据仓库。
它将结构化的数据文件映射成一张表,并提供类SQL(HQL)的查询。
本质是是将HQL转换成MapReduce程序。

为什么说Hive是基于Hadoop的一个数据仓库?

  1. 数据存储在HDFS
  2. 数据分析的底层是MapReduce
  3. 执行程序运行在YARN上

Hive的优缺点

优点:
不用编写MapReduce程序,减少学习成本
支持用户自定义函数
适用于实时要求不高的大数据量数据分析(执行延迟高)

缺点:
执行延迟高,不适用于实时场景和小数据量场景
HQL表达能力有限,不擅长迭代式算法(比如将一个MapReduce的输出作为另一个的输入,只能采用HQL嵌套的方式去尝试实现)
执行效率低,调优比较困难

Hive(数据仓库)与数据库的比较

相同点:
SQL查询基本一致。

不同点:

  1. 应用场景
    数据仓库是面向主题设计的,一般是存储历史数据,主要用于数据分析工作(OLAP,商品推荐等)。
    数据库是面向事务设计的,一般是存储在线交易数据等,主要用于数据处理工作(OLTP,银行转账等)。

  2. 执行效率
    数据仓库的设计主要是为了分析数据,对实时要求性不高,对于update操作不太友善,执行效率较低。
    数据库的设计主要是为了处理数据,对实时要求性较高,一般都支持update操作,执行效率较高。

  3. 数据规模
    数据仓库支持的数据量规模较大,数据库支持的数据量规模较小。

Hive安装部署

安装模式说明

Hive可以简单分为三种安装模式。

  1. 嵌入模式:元数据信息被存储在Hive自带的Derby数据库中。只允许创建一个连接。多用于Demo练习。
  2. 本地模式:元数据信息被存储在MySQL数据库中。MySQL数据库与Hive运行在同一台物理服务器中,可以创建多个连接。多用于开发和测试。
  3. 远程模式:元数据信息被存储在MySQL数据库中。MySQL数据库与Hive运行在不同物理服务器中,可以创建多个连接。多用于真正生产环境。

本地模式安装

安装MySQL

参考MySQL安装文档

安装Hive

下载地址:http://archive.apache.org/dist/hive/
这里以apache-hive-3.1.2-bin.tar.gz为例

1
2
3
4
5
6
7
8
9
10
11
12
## 解压文件到指定路径
[root@node03 tools]# tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/
## 文件重命名
[root@node03 opt]# mv apache-hive-3.1.2-bin/ hive-3.1.2
## 配置环境变量
[root@node03 opt]# vim /etc/profile
export HIVE_HOME=/opt/hive-3.1.2
export PATH=$HIVE_HOME/bin:$PATH
## 使配置生效
[root@node03 opt]# source /etc/profile
[root@node03 opt]# which hive
/opt/hive-3.1.2/bin/hive

移除Hive相关日志jar包

1
2
3
4
5
6
[root@node03 lib]# pwd
/opt/hive-3.1.2/lib
[root@node03 lib]# ll *slf4j*
-rw-r--r--. 1 root root 24173 Sep 27 2018 log4j-slf4j-impl-2.10.0.jar
## 采用重命名的方式,防止后续要用
[root@node03 lib]# mv log4j-slf4j-impl-2.10.0.jar log4j-slf4j-impl-2.10.0.jar.bak

拷贝MySQL驱动jar包

1
2
3
## 将下载好的MySQL驱动jar包上传到hive指定路径。
[root@node03 lib]# ll mysql-con*
-rw-r--r--. 1 root root 1006956 Feb 9 16:46 mysql-connector-java-5.1.48.jar

配置hive-site.xml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?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://node03: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>root</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>
<!-- Hive 默认在 HDFS 的工作目录 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
</configuration>

新建Hive元数据库

1
mysql> create database metastore;

初始化Hive元数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
## 首先保证guava相关jar包版本统一
[root@node03 hive-3.1.2]# ll /opt/hadoop-3.2.1/share/hadoop/common/lib/ |grep guava
-rw-r--r--. 1 1001 1001 2747878 Sep 10 2019 guava-27.0-jre.jar
-rw-r--r--. 1 1001 1001 2199 Sep 10 2019 listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
[root@node03 hive-3.1.2]# ls lib/ |grep guava
guava-19.0.jar
jersey-guava-2.25.1.jar
## 移除低版本
[root@node03 hive-3.1.2]# rm -rf lib/guava-19.0.jar
## 复制高版本
[root@node03 hive-3.1.2]# cp /opt/hadoop-3.2.1/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/
[root@node03 hive-3.1.2]# ls lib/ |grep guava
guava-27.0-jre.jar
jersey-guava-2.25.1.jar
## 初始化
[root@node03 hive-3.1.2]# schematool -initSchema -dbType mysql -verbose

Hive启动方式

Hive CLI(命令行方式)

使用./bin/hive命令启动Hive客户端。常用命令与MySQL基本相同。这里简单举例说明。

常用命令

1
2
3
4
5
6
7
8
9
## 新建数据库
hive> create database test;
OK
Time taken: 0.095 seconds
## 查看数据库
hive> show databases;
OK
default
test

显示当前所在数据库

1
2
hive> set hive.cli.print.current.db=true;
hive (default)>

Hive客户端使用Shell命令和HDFS命令

如果需要在Hive客户端使用shell命令,可以通过!+shell命令来实现,注意结尾带上分号;

1
2
3
4
5
6
hive (default)> ! ls -l /usr;
dr-xr-xr-x. 2 root root 28672 5月 6 13:53 bin
drwxr-xr-x 3 root root 26 3月 1 12:34 java
dr-xr-xr-x. 30 root root 4096 3月 7 20:06 lib
drwxr-xr-x. 15 root root 175 3月 18 15:17 local
dr-xr-xr-x. 2 root root 16384 3月 7 19:19 sbin

如果需要在Hive客户端使用HDFS命令,可以通过dfs来实现,注意结尾带上分号;

1
2
3
hive (default)> dfs -ls /user/hive;
Found 1 items
drwxrwxrwt - hive hive 0 2019-05-23 09:58 /user/hive/warehouse

HiveServer2/Beeline

Hive内置了HiveServer2服务,HiveServer2的作用是提供jdbc/odbc接口,为用户提供远程访问Hive数据库的功能。
例如用户使用HiveServer2在个人电脑中访问远程服务中的Hive数据。HiveServer2支持多客户端并发访问和身份验证。
HiveServer2拥有自己的CLI工具——Beeline。

修改hadoop配置文件

使用HiveServer2之前,需要提前配置好Hadoop集群的core-site.xml配置文件。

1
2
3
4
5
6
7
8
9
<!--  指定Hadoop的root用户可以代理本机上所有的用户。如果不配置,可能会出现AuthorizationException 异常-->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>

启动HiveServer2服务

1
2
3
4
5
6
7
8
9
## 后台启动
[root@node03 hive-3.1.2]# nohup hiveserver2 &
## 查看相关进程
[root@node03 ~]# jps
11611 NameNode
12651 RunJar
12829 Jps
12063 ResourceManager
[root@node03 ~]# ps -ef|grep hive

启动Beeline

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
## 使用默认配置启动
[root@node03 hive-3.1.2]# beeline -u jdbc:hive2://node03:10000 -n root
Connecting to jdbc:hive2://node03:10000
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 3.1.2 by Apache Hive
0: jdbc:hive2://node03:10000> show databases;
0: jdbc:hive2://node03:10000>

## 或者先使用beeline,再输入相关连接信息
[root@node03 hive-3.1.2]# beeline
Beeline version 3.1.2 by Apache Hive
## 注意这里是!connect
beeline> !connect jdbc:hive2://node03:10000 -n root
Connecting to jdbc:hive2://node03:10000
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://node03:10000> show databases;
2 rows selected (0.155 seconds)
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2023 henrrywan

请我喝杯咖啡吧~

支付宝
微信