大数据发展背景
- Hudi用于管理分布式文件系统上大型分析数据集存储,支持Spark和Flink整合。它能够是DFS数据集在分钟级时延内支持变更,也支持下游系统对这个数据集的增量处理。
学习目标
- 什么是数据湖
- 为什么使用数据湖
- Hudi基本功能
- 如何编译Hudi源码
- Hudi与Spark集成管理
- Hudi中COW和ROW不同类型表功能
- Hudi的三种查询方式
- Hudi中不同表数据写入流程
数据仓库
数据仓库是一个用于存储、分析、报告的数据系统。目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持。
- 数据仓库本身不生产数据,也不消费数据
- 企业根据业务需求分成不同层次,数据层(ODS)\仓库层(DW)\应用层(DA)
数据湖
- 数据湖是一个集中式的数据存储库,用于存储大量的原始数据。
- 以原始格式存储数据的系统或存储库,可以包括结构化数据、半结构化数据、非结构化数据和二进制数据。
- 查询应用数据的时候才会开始分析数据需求和应用架构,用于报告、可视化、高级分析和机器学习等任务。
数据仓库是优化的数据库,用于分析业务的关系数据。数据湖数据来自关系数据和非关系数据。
特性 | 数据仓库 | 数据湖 |
---|---|---|
数据 | 分析业务的关系数据 | 关系数据和非关系数据 |
Schame | 在写入数据仓库 | 读取schema |
性价比 | 更快查询较高存储成本(空间代替时间,冗余存储) | 更快查询只需较低成本 |
数据质量 | 便于管理 | 难以监控 |
用户 | 业务分析师 | 数据科学家、数据开发人员和业务分析师 |
分析 | 批处理、BI | 机器学习、预测分析、数据发现 |
数据湖框架
- delta Lake
支持update/delete/merge - Iceberg
- Hudi(Hadoop upsert and incrementals)
fast upsert/delete/compaction功能,管理存储在Hdfs上的数据。支持快速upsert/delete。
Hudi功能
- Hudi是在大数据存储上的一个数据集,可以将Change Logs通过upsert的方式合并进hudi。
- 可以暴露成普通的Hive或Spark表,通过API或命令行可以获取增量修改的信息,供下游消费。
- Hudi保管修改历史,可以时间旅行或回退。
- 内部有主键到文件级的索引,默认是记录到文件的布隆过滤器。
- 提供了两种方式的原语言:
-Update/delete记录:使用细粒度的文件/记录级别索引支持update/delete记录,同时保证写操作的事务保证,查询会处理最后一个提交的快照,并基于此输出结果。
-变更流:Hudi对过去数据变更提供了一流的支持:可以从给定时间点获取给定表中update/insert/deleted的所有记录的增量流,并解锁新的查询姿势。
Hudi基础架构
- 将数据摄取到数据湖存储,使用HDFS作为数据湖的数据存储。
- 基于HDFS构建Hudi的数据湖。
- Hudi提供统一的访问Spark和Flink数据源
- 外部通过不同引擎访问接口。
Hudi版本
-
Hudi 0.5版本
支持Spark,将数据批量和流式写入 -
Hudi 0.6版本
逐渐添加新特性和功能 -
Hudi 0.7.0版本
Flink计算引擎成熟,Flink1.12 -
Hudi 0.8
支持Flink SQL client操作Hudi数据 -
Hudi 0.9
重构与Flink的集成,支持CDC的能力,数据流式入湖。流式查询Hudi数据。 -
Hudi 0.10
支持更多的数据源:如Mysql和Kafka