Hive知识点汇总及部分架构
2024-04-08 10:05:55 0 举报
hive主要知识点汇总及涉及到的一些架构
作者其他创作
大纲/内容
产生背景
直接使用HadoopMR产生的问题
学习成本较高,因为要学习 Java 或者 Python
MapReduce 实现复杂的查询逻辑的时候,开发难度相对较大
是什么
数据分析工具
用于解决海量结构化数据的统计分析
总结:交互方式采用 SQL,元数据存储在 Derby 或 MySQL,数据存储在 HDFS,
分析数据底层实现是 MapReduce,执行程序运行在 YARN 上
分析数据底层实现是 MapReduce,执行程序运行在 YARN 上
优缺点
启动服务
开启hive服务
检查 MySQL 服务是否启动
启动zookeeper
启动yarn(HDFS)
启动JobHistory
(初始化hive数据库,仅第一次执行)
启动Metastore服务
启动 HiveServer2 服务
客户端两种连接方式命令
直连(类比hive shell)
间接连(类比beeline cli)
建库、建表
数据库相关操作
全部有分号;
全部有分号;
建库
建立在默认路径上
CREATE DATABASE shop;
避免数据库重复
CREATE DATABASE IF NOT EXISTS crm;
建立在指定路径
CREATE DATABASE IF NOT EXISTS school location '/hive/school.db';
修改库
ALTER DATABASE 命令
ALTER DATABASE school SET DBPROPERTIES('createtime'='20220803');
数据库详情
显示所有数据库
SHOW DATABASES;
切换数据库
USE school;
可以通过 like 进行过滤
SHOW DATABASES LIKE 's*';
查看某个数据库的详情
DESC DATABASE school;
DESCRIBE DATABASE school;
DESCRIBE DATABASE school;
删库
最简写法
DROP DATABASE school;
安全写法
DROP DATABASE IF EXISTS school;
强制删除
DROP DATABASE IF EXISTS school CASCADE;
表相关操作
建表
完整语法
案例
临时表
temp
内部表(默认)
managed table
删除的时候元数据与Row数据均删掉
数据将真实存在于表所在的目录内
举例
row数据相关信息
user.txt
RowUrl:存放路径
上传至 HDFS(例如 /yjx/user.txt)
建表语句(相当于建字段)
映射关系生成
执行导入命令
将Row数据根据RowUrl导入表格
外部表(推荐)
external table
新建表仅仅是指向一个外部目录而已
删除时仅仅是把元数据和表本身删掉,数据还在
方案一(推荐):创建时指定数据位置
建表
指定数据位置
方案二:先创建然后再导入数据
建表
LOAD
总结:只要使用load语句,数据就会被移动
执行Drop
元数据均删除
外部表
【Row数据】【仍然在】
内部表
【Row数据】【被删除】
查看表信息
数据类型
基本类型
map
struct
arry
hive核心组件
cLi
直连
hive
4.0之后也变成了间连模式
间连
hiveserve2
metastore
HiveDiver
driver
compiler
execution engine
用核心组件搭建hive运行环境
模式一:内嵌
模式二:本地
模式三:远程(推荐)
工作执行流程
前期准备RowData
将RowData导入HDFS或其他存储系统
建立映射
由MetaStore建立hive和HDFS的映射
建表语句执行后,表格以及表对应的RowData文件全限定名会被记录在MetaStore中
客户端输入sql后执行流程
解析器
对sql语句进行检查排错
编译器
优化器
Sql与MR模板进行匹配,生成job执行计划
执行器
执行job计划
与hadoop环境的yarn集群交互
hive流程图及与hadoop交互过程
Hive高级
分区分桶
分区partition
是什么
相当于给一个超大文件按照某个字段建了n个目录,分别存储数据,多级分区类似多级目录
在目录上做文章---->表中某字段相当于目录
举例
第一集分区:按年级
第二级分区:按专业
第三级分区:按班级
分类
静态
自定义分区,用SQL查询出来然后导入到分区目录
动态
MR帮我们分区
查看分区模式
分桶clustered
在文件上进行数据划分
举例
在上述分区的文件上对需求字段进行hashcode,对n取余即分成n个桶
关联表分桶注意
建议大大数据表分桶数是小数据分桶数的倍数或相等,这样能减少join次数
子主题
数据抽样
分类
随机抽样
分块抽样
分桶抽样
用途
可以用于查看数据中较大概率出现的数据,然后对其进行打散处理,预防数据倾斜
事务
ACID特性
原子,一致,隔离,持久
实现原理
版本控制
更新/删除实质:在一个新的目录里创建新表进行的插入/删除操作
删除操作的数据在后期会被清理,row数据就真正消失
索引
弃用,应为数据量大的时候索引量级也很大,不易维护
视图/物化视图
把经常用到的SQL语句保存下来,可以作为别的查询的一个基础
物化视图
直接把常用SQL查出来的数据表格保存,然后定时或定操作数的更新该数据
高级查询
行转列
一行变多行
展开explode
侧视图lateral view
列转行
多行变一行
COLLECT_SET()
去重
COLLECT_LIST()
不去重
url解析
JSON解析
窗口函数
语法
本质
本质是把原表某列数据进行处理的结果作为新增查询列,以上综合查询作为结果表
语法拆解
function()类型
聚合
count()、sum()
分析
RANK()
并列排名不连号
DENSE_RANK()
并列排名也连号
ROW_NUMBER()
只连号不并排
取值
窗口操作项
分组
over(partition by 字段名)
排序
(...order by 字段名)
移动窗口
(......rows/rang between 起点 and 终点)
两者区别
rows
拿着实际指定表格行进行数据选取后运行function()
rang[start , stop]
start:本窗口排序列字段起始值
stop:本窗口排序列字段结束值
从符合start开始到stop结束来进行本窗口的行选取工作,之后对选出来的行进行function()
自定义函数
创建自定义函数java项目
编码基本流程
继承相应的通用类,重写内部方法
UDF/UDAF/UDTF
初始化
处理数据逻辑
返回结果
将函数集成到hive流程
将项目编译打包上传至HDFS
在 Hive 中定义自定义函数
重新加载函数
测试函数
移除函数
hive压缩
运用得当降本增效
I/O密集型任务最适用
BZip2、Zip 或 LZO可切片
用途
用于减少端到端的I/O和网络流量(haddoop宝贵资源)
两个阶段
hive压缩
实质是在hive里设置是否对输入Hadoop端的数据进行压缩处理
hadoop压缩
Input
输入阶段选用可分片的压缩方式,解压时进行并行处理速度快
如BZip2
Transformation
(MAP/REDUCE TASK)
使用压缩/解压速度快方式
因为这个阶段不需要分片
输出OUTPUT
输出的文件为下一个 Job 的输入时
选BZip2
输出的文件直接存到 HDFS 作为归档
选压缩比高
示意图
hive存储
大致分类
OLTP
一般采用行存储
OLAP
一般采用列存储
优化
hive数据倾斜优化
单表
先打散
加盐
再聚合
join
大小表
小表足够小:直接入内存
则直接Map join
大大表
GUI
连接IDEA,在IDEA里写SQL
spark快的原因
DGA有向图计算,不走回头路
提前申请计算机资源
每次合并尽量写入缓存,减少落盘
order by
只有一个reduece,不建议
收藏
0 条评论
下一页