HIVE原理

1. Hive简介

image-20230413104555286


MR程序编写较难

SQL编写容易


1.1 总结与思考⭐

1)对MR程序的封装,使用SQL就能使用HIVE数据仓库

2. 什么是数据仓库


image-20230413104733910

image-20230413104853990


2.1 数据仓库面向主题


image-20230413104955538


2.2 数据仓库随时间变化


image-20230413105101580


2.3 数据仓库相对稳定


image-20230413105131059


image-20230413105242159

image-20230413105304102

2.4 总结与思考⭐

1)OLTP和OLAP的对比

image-20230413105304102

3. 数据仓库的结构


image-20230413105454170

image-20230413105511457


3.1 数据源


image-20230413105625323


内部信息:业务数据库,自动化系统包含的数据

外部数据:市场信息,竞争对手,法律法规,外部统计数据等


3.2 数据存储及管理


image-20230413111220449


  • 数据仓库用于分析,当要分析某个主题时,会把这个主题相关的所有数据抽取过来

  • 这些数据可能来自不同系统,数据格式不统一,所以要进行转换

  • 数据仓库可以划分为企业级和部门级

  • 数据集市可以理解为小型的部门或者工作级别的数据仓库


3.3 OLAP服务器


image-20230413111722547


3.4 前端工具


image-20230413111845117


3.5 总结与思考⭐

1)数据仓库结构图

image-20230413105511457

4. 数据仓库的数据模型


image-20230413112018305

4.1 星型模型


image-20230413112055674

image-20230413112249247


  • 星型模型以一个事实表和一组维度表组合而成

  • 以事实表为中心,关联维度表而成


4.2 雪花型模型


image-20230413112337784


多层维度表,实际效率并不高,实际应用中较少使用


4.3 总结与思考⭐

1)星型模型:一个实体对应一组维度表,实际开发运用较多

2)雪花模型:一个实体对应多组维度表,效率不高,实际运用较少

5. Hive简介


5.1 什么是HIVE


image-20230413112625503

image-20230413112941808


1)hive建立在HDFS之上,对HDFS中数据进行ETL

2)将结构化数据映射为一张数据表

3)HIVE并不是一个数据库


5.2 HIVE系统架构


image-20230413113305437


CLI / JDBC / WEB UI: 用户接口

CLI:命令行界面

Thrift Server: 跨语言服务

DRIVER: 底层驱动引擎

Metastore:元数据存储系统


5.2.1 用户接口

image-20230413113620564


5.2.2 跨语言服务

image-20230413113659648


5.2.3 底层驱动引擎

image-20230413113736076


5.2.4 元数据存储系统

image-20230413113804180


5.3 总结与思考⭐

1)HIVE结构图

image-20230519093117165

2)HIVE组件

用户接口:CLI/JDBC/ODBC/WEB UI

跨语言服务:Thrift Server,不同语言转换为java以调用HIVE接口

底层驱动引擎:Driver,有编译器(Compiler),优化器(Optimizer),执行器(Executer)组成

元数据存储:Metastore,将表的表,列,分区,目录等元数据信息,存储在Mysql数据中


6. HIVE工作原理


image-20230413114035639

image-20230413114755827


  1. UI向Driver发送查询操作(经过Thrift跨语言服务的翻译)

  2. DRIVER借助编译器解析查询,获取查询计划

  3. 编译器将获取元数据的请求发送给metastore

  4. metastore以响应的方式,发送给编译器

  5. 编译器检查需求,并将计划重新发送给DRIVER

  6. DRIVER将执行计划发送给执行引擎

  7. 执行引擎从datanode中获取结果,并将结果发送给DRIVER和UI


6.1 总结与思考⭐

1)具体参考以上

7. HIVE数据模型


image-20230413140318379


7.1 数据库


image-20230413140403735


类似于关系型数据库中的数据库


7.2 表


image-20230413140500439


7.3 分区


image-20230413140553430

image-20230413140625396


7.4 桶表


image-20230413140653307


加载桶表时,会对字段值进行哈希取值,然后除以桶个数得到余数进行分桶

物理上,每个桶表就是表或分区的一个文件

分桶就是分文件


7.5 总结与思考⭐

1)HIVE数据模型

image-20230519094341390

2)表:外部表,内部表;外部表,直接引用HIVE以外的HDFS表,只建立元数据信息,删除也只删除元数据;内部表,直接存储在HIVE中

分区:独立的列

桶表:桶是HIVE的最小单元,数据加载到桶表时,会根据字段HASH值对分桶个数取模,莫值就是分桶的位置;物理上,每个桶表示成具体的一个文件

8. HIVE安装模式


image-20230413141206398


1)嵌入模式

2)本地模式

3)远程模式


8.1 嵌入模式


8.1.1 下载解压HIVE安装包

image-20230413141427070

image-20230413142733719

image-20230413142938825

image-20230414091031970


8.2 本地模式和远程模式

8.2.1 安装MYSQL

image-20230413143137440

image-20230413143254060

image-20230414091248459


8.2.2 HIVE配置

1)修改hive-env.sh配置


image-20230414091407384

image-20230414091542152


2)修改hive-site.xml,配置mysql


image-20230414091737426

image-20230414091829960

image-20230414091902800

image-20230414091921136


8.3 总结与思考⭐

1)嵌入模式,本地模式,远程模式,主要在于配置文件的编写


9. HIVE的管理方式

9.1 HIVE的管理之CLI方式

image-20230414092143583

image-20230414092246052


9.2 HIVE的管理之远程服务


image-20230414092415139

image-20230414092518421

image-20230414092641789

image-20230414092722004

image-20230414092920523

image-20230414093021970


9.3 总结与思考⭐

1)bin/hiveserver2 启动hive

2)CLI终端管理;远程服务连接,远程连接命令:/bin/beeline,!connect jdbc:hive2://hadoop01:10000

10. HIVE的内置数据类型

10.1 基本的数据类型


image-20230414093300945

10.2 复杂的数据类型


image-20230414093404203

image-20230414093455128

image-20230414093531235

image-20230414093553691

image-20230414093626345


10.3 总结与思考⭐

1)基本的数据类型

image-20230519100617206

image-20230519100630375

2)复杂的数据类型

image-20230519100652247

11. HIVE数据库操作


image-20230414093851722

image-20230414094013609

image-20230414094210680

image-20230414094333816


11.1 HIVE内部表操作


image-20230414094914564

image-20230414095214744

image-20230414095453905

image-20230414095541215

image-20230414095652272

image-20230414144559110

image-20230414144826494

image-20230414150804795

image-20230414150907623


11.2 HIVE外部表操作


image-20230414151524668


创建外部表,不需要移动结构化文件。

遇到大文件导入时,可以使用外部表来操作。

创建外部表时,加入location '/stu'


image-20230414151807325

image-20230414152255927

image-20230414152544823


11.3 HIVE内部表和外部表区别


image-20230414151244378


11.4 HIVE的分区表操作

11.4.1 普通分区

image-20230414152733216

image-20230414152846405


分区表插入输入不能使用Hadoop移动命令,需要使用Load命令

新增分区


image-20230414153231758


image-20230414153258882

image-20230414153312439

image-20230414153534426


1.1.新增分区


image-20230414154350134


1.2 修改分区


image-20230414154623380


1.3 删除分区


image-20230414154737816

image-20230414154913272


11.4.2 动态分区

image-20230414154930900

image-20230414155103234

image-20230414155153839

image-20230414155259110

image-20230414155442010


11.5 总结与思考⭐

1)创建外部表extenal关键字

2)外部表和内部表的区别

image-20230519100956969

3)分区表操作:分区表插入输入不能使用Hadoop移动命令,需要使用Load命令

4)动态分区,以最后两个字段的值分区

12. HIVE桶表操作


image-20230414155925247

image-20230414155946531

image-20230414160215176


1.开启分桶

2.设置分桶个数,保持与ReduceTask一致

3.clustered by(分桶字段)

4.into 4 buckets ---- 拿分桶字段的HASH值跟分桶个数取莫,余数就是分桶编号


image-20230414160538434

image-20230414160631404

image-20230414160648978


给分桶表加载数据

1.先创建临时表,给临时表加载数据

2.再通过临时表,向分桶表插入数据


image-20230414160900272

image-20230414160933239


12.1 桶表优化


在join时,如果两个表有相同字段,且对两个表都进行了分桶操作,那么查询效率会提升

大规模数据集,选择小部分数据集抽样运算,也可以使用分桶


12.2 总结与思考⭐

1) 创建桶表

image-20230519101433862

2)加载数据

image-20230519101514701

3)总结

image-20230519101635474

13. HIVE数据操作

13.1 HIVE查询


image-20230414164657938

image-20230414164722759

image-20230414164802429

image-20230414164917319


13.1.1 查询优化

distrubute by 结合 sort by == cluster by


13.1.2 基本查询(重要)

image-20230414165153366

image-20230414165202293

image-20230414165234537

image-20230414165304580

image-20230414165358421

image-20230414165411878

image-20230414165507731

image-20230414165712790


仅reduce内排序,没有全局排序


image-20230414165732093


distribute by 一定要分配多个reduce进行处理,否则无法看到distribute by 效果


image-20230414165855010

image-20230414170140659

image-20230414170304187


13.2 总结与思考⭐

1)基本查询

image-20230519102323942

2)查询优化

distrubute by 结合 sort by == cluster by,distribute by 一定要分配多个reduce进行处理,否则无法看到distribute by 效果

3)hive性能优化

  • 业务层面:通过梳理业务逻辑,看业务逻辑有没优化的地方,或者加入限定的条件,减少连接表的数据量;控制连接表的个数,增加临时中间表
  • 技术层面:通过小文件个数,控制map任务的个数,防止map个数过多;调整maxsize,minsize,splitsize,map,reduce等参数控制map,reudce的个数;调整溢写内存和百分比,减少溢写的次数,提高shffule阶段的效率;对表进行分区,分桶,适用对某些特定字段查询的场景;使用cluster by进行排序;
posted @ 2023-06-28 16:16  付十一。  阅读(17)  评论(0)    收藏  举报