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