Apache Hive简介
什么是分布式SQL?
通过分布式的方式,执行SQL语句,获取分析结果。
Hive的优势
通过java或者python直接操作MapReduce,也可以做分析,但是开发难度稍大。
通过SQL做分析,相对简单易上手。
Apache Hive 就是让我们写类SQL语法,然后Hive底层会将其解析成MR来执行。
总结
以后只要写HiveSQL语法就可以了,Hive会将其自动转成MR任务,交由Yarn来调度执行。
Hive是依赖Hadoop的,想使用Hive,必须先搭建和启动Hadoop集群。
自主设计一款Hive引擎-架构图
自主设计一款Hive引擎,至少要有:
元数据管理器:维护和管理元数据的,且要能存储元数据。
SQL解析器:解析SQL语法的,就将其转成MR任务。
分析结果图,如下:
Apache Hive架构图
Hive的本质
Hive的架构图
Hive的三种部署方式
内嵌模式
1.不需要手动开启和配置metastore服务
2.客户端不能共享metastore服务和元数据库
3.可以使用Hive内置的数据库Derby存储元数据
本地模式
1.不需要手动开启和配置medastore服务。
2.可以共享元数据库,元数据库可以使用外置的数据库。
例如:使用MySQL来存储Hive的元数据。
3.不能共享metestore服务。
远程模式
1.必须手动启动metastore服务。
2.元数据可以存储在第三方数据库中,例如:MySQL中。
3.多客户端可以共享metastore服务和元数据库。
4.Hive的第一代客户端底层是shell实现的,只需要启动metastore服务即可。
5.Hive的第二代客户端底层是java实现的,必须手动启动HiveServer2服务才能正常使用。
Hive第一代客户端 =>metastore服务=>MySQL(元数据库)
Hive第二代客户端=>HiverServer2服务=>metastore服务=>MySQL(元数据库)
Hive的部署及体验(第一代客户端)
Hive的部署
1.Hive是一款单机工具,只需要部署到一台服务器上即可。它底层会将HQL解析成MR任务,分布式执行。
启动Hive服务
1.启动Hadoop集群,只在node1机器执行即可。
[root@node1 ~]# start-all.sh
2. 启动历史服务, 只在node1机器执行即可.
[root@node1 ~]# mr-jobhistory-daemon.sh start historyserver
3. 分别在node1, node2, node3三台机器中, 执行jps命令, 查看启动的Hadoop集群节点.
[root@node1 ~]# jps
[root@node2 ~]# jps
[root@node3 ~]# jps
4. 启动hive的metastore(元数据管理服务), 因为目前没有配置path环境变量, 需要到hive目录下执行.
[root@node1 ~]# cd /export/server/hive/bin
[root@node1 bin]# ll
总用量 48
-rwxr-xr-x 1 root root 881 8月 23 2019 beeline -- Hive的第2代客户端
drwxr-xr-x 3 root root 4096 10月 24 2021 ext
-rwxr-xr-x 1 root root 10158 8月 23 2019 hive -- Hive的第1代客户端
-rwxr-xr-x 1 root root 1900 8月 23 2019 hive-config.sh
-rwxr-xr-x 1 root root 885 8月 23 2019 hiveserver2
-rwxr-xr-x 1 root root 880 8月 23 2019 hplsql
-rwxr-xr-x 1 root root 3064 8月 23 2019 init-hive-dfs.sh
-rwxr-xr-x 1 root root 832 8月 23 2019 metatool
-rw------- 1 root root 3015 1月 7 18:49 nohup.out
-rwxr-xr-x 1 root root 884 8月 23 2019 schematool
4.1 前台方式, 启动metastore服务
[root@node1 bin]# ./hive --service metastore -- 启动之后,当前窗口就被占用了.
4.2 后方方式, 启动metastore服务, 不占用当前窗口
[root@node1 bin]# nohup ./hive --service metastore & --需要敲两下回车
[root@node1 bin]# jps -m -- 查看本机和Java相关的进程(详细信息)
Hive体验(第1代客户端)
1. 切换到hive的bin目录下
[root@node1 ~]# cd /export/server/hive/bin
[root@node1 bin]# ./hive -- 之后就可以写HiveSQL代码了.
Hive的体验(第2代客户端)
Hive的第2代客户端底层是Java语言写的, 所以必须先启动 hiveserver2服务.
1. 切换到hive的bin目录下
[root@node1 ~]# cd /export/server/hive/bin
2.启动hiveserver2
启动hiveserver2服务(需要2~3分钟), 确保你已经成功启动Hadoop集群和metastore服务.
[root@node1 bin]# nohup ./hive --service hiveserver2 &
3. 查看进程是否启动.
[root@node1 bin]# jps -m
4. 查看hiveserver2服务是否初始化完毕.
[root@node1 bin]# lsof -i:10000
5.切换到hive的bin目录下
[root@node1 ~]# cd /export/server/hive/bin
6. 启动第2代客户端
[root@node1 ~]# ./beeline -- 敲回车
beeline> !connect jdbc:hive2://node1:10000 -- 敲回车
Connecting to jdbc:hive2://node1:10000
Enter username for jdbc:hive2://node1:10000: root -- 输入账号(可以任意写), 敲回车
Enter password for jdbc:hive2://node1:10000: -- 不用输入, 直接敲回车.
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://node1:10000> -- 可以在这里直接写HiveSQL语句了.