文章目录
Hive基础知识
一、Hive与HDFS的数据映射
1.Hive对象与HDFS关系
数据库:每个数据库在HDFS中对应一个目录
目录的名字:库名.db
表:每张表在数据库中对应的目录下建立一个与表同名的目录
表的数据:映射的是HDFS上的文件
2.元数据映射
所有Hive中数据库、表与HDFS的映射关系存储在元数据中,Hive服务端会读取元数据找到这张表对应的HDFS数据
3.元数据映射过程
1.先检索数据库的信息
2.再检索表的信息
3.通过表的SD_ID来获取这张表映射的HDFS的地址
4.将整个表的目录中的 所有数据进行读取并返回
二、Hive转换与MapReduce过程
1.基本映射关系
MapReduce | SQL |
---|---|
Input | from |
Map | select,from |
Shuffle | group by,order by |
Reduce | having,limit |
Output | 将SQL结果保存 |
2.执行解析
select region,count(*) as numb from tb_house where region != '浦东' group by region order by numb;
3.查看执行计划
explain select region,count(*) as numb from tb_house where region != '浦东' group by region order by numb;
三、元数据:metastore的功能和存储方式
1.metastore功能
Hive中的元数据记录了Hive中所有对象信息,包括数据库信息,表的信息,字段的信息,重点记录了Hive表和HDFS文件的映射关系
每次创建表关联文件,Hive都会自动创建表的元数据
每次查询表的数据,Hive都会从元数据中获取表的对应的HDFS信息
2.metastore的存储方式
方式:
嵌入式数据库:Local/Embedded Metastore Database(Derby)
存储在derby
本地数据库
存储在MySQL中,可以直接访问
远程Metastore服务
存储在MySQL中,但是通过一个进程来访问
位置:
默认位置:Hive自带的Derby数据库
缺点:不能共享,不能启动多个实例,一般不用
自定义位置:自定义将元数据存储到其他数据库中
类型:MySQl、Oracle、PostGrepSQL,工作中一般存储到MySQL中
3.metastore的功能?
存储Hive中所有对象的信息:数据库、表、列
存储Hive中表与HDFS的映射关系
四、元数据:metastore共享问题
1.工作中的应用场景
工作中不使用Hive来实现数据仓库中的分布式计算,
使用替代品:SparkSQL、Impala、Presto,因为他们计算更快,性能更好,语法都兼容Hive的语法
2.如果用SparkSQL来处理Hive数据仓库中的表,SparkSQL怎么知道Hive中有哪些表?
让SparkSQL读取Hive元数据
3.如何SparkSQL获取了Hive的元数据,SparkSQL怎么知道这个元数据的含义是什么?
解析元数据的含义
4.如果多个框架都需要访问Hive的元数据,每个框架都封装解析代码,就非常冗余,如何解决这个问题?
通过metastore服务,实现元数据共享
五、元数据:metastore服务
1.metastore功能
实现元数据共享服务,专门负责管理Hive的元数据,接收所有需要访问元数据的请求
2.metastore的配置
#编辑hive-site.xml文件,添加以下内容
<property>
<name>hive.metastore.uris</name>
<value>thrift://node3:9083</value>
</property>
3.metastore的启动
#1.先启动metastore服务
hive --service metastore
#2.再启动Hive的服务端和客户端
hive
#3.查看metastore端口开放情况
netstat -atunlp | grep 9083
六、Hive客户端与服务端
1.Hive Shell
功能:
Hive特殊的客户端,启动时会自动包含启动服务端
命令:
hive
特点:
服务端客户端一体,交互性不太友好
2.Beeline与h