这是我参与「第四届青训营 」笔记创作活动的第12天。
课程回顾:
HDFS-分布式存储系统:
HDFS通过将文件分块存储大文件,HDFS的组件有NameNode和DataNode,分别负责提供元数据和数据服务。在读写数据时,HDFS客户端需要先从NameNode上获取数据读取写入的DataNode地址,然后和DataNode交互完成数据读写。
Parquet-高性能列式存储:
过滤下推到存储侧,更好地压缩性能
本节课程分为以下内容:
- 数据湖发展历史:数据湖三阶段:Hadoop,Hive,湖仓一体
- 核心技术,湖仓一体项目解决的关键问题:Transaction,Scheme变更,冲突解决
- 各有所长,不同湖仓一体项目的独到之处
- 总结场景,三个湖仓一体项目的对比,数据湖在字节中应用
发展历史
数据湖:一个存储数据的地方,最好带一点分析能力
有人把它做了一个比喻,就类似于在湖边搭建了很多小房子,有的负责数据分析,有的运转机器学习,有的来检索音视频等,至于那些数据源流,都可以从数据湖里轻松获取。
数据湖发展阶段1-Hadoop
数据湖最开始的概念--分布式存储HDFS
存储在远程的一个磁盘中
使用目录来区分不同的数据集
缺点:
1, 没有记录文件的schema(包括列名,列类型) 2. 那一的值数据集包含了那些文件,以什么样的分区组织的 3. 如果多个程序都在修改这个数据集(修改数据,修改表结构),其他程序难以配合做修改
数据湖发展阶段2-Hadoop
数据湖演进-- Hive Metastore
对数据湖中的数据集集中“定义”
- 数据湖中存在那些数据集
- 它们存储在什么目录
- 数据集的schema是什么样的
- 数据集有哪些分区,每个分区的目录是什么
这样就对数据湖的进行管理起来了
数据湖发展阶段3-湖仓一体
数据仓库:数据仓库将数据从数据源提取和转换,加载到目的地;数据仓库存储/计算不分离;
湖仓一体结合了数据湖和数据仓库的优势
将数据仓库中对于数据的严格管理直接时间到了低成本的分布式存储之上
业界三大数据湖
核心技术
设计一个简单的数据湖
文件结构
元数据:用来关于数据的数据
time travel
- 每次写入都生成一个新的元数据文件,记录变更
- 分区数据在update时,不要删除旧数据,保证新旧数据共存
- 元数据中存储具体的文件路径,而不仅仅是分区文件夹
Transaction
ACID:是指数据库在写入或更新资料的过程中,为了保证事务是正确的可靠的,所必须具备的四个特性。
- 原子性 - 本次写入要么对用户可见,要么不可见
- 一致性 - 输入什么,落盘就是什么
- 事务隔离 - 正确解决读写冲突和写写冲突
- 持久性 - 落完数据后,即便服务器重启结果也不变
原子性
事务隔离
Schema Evolution
用户并不直接读取parquet文件本身,而是通过数据湖接口读取,如Datset ds = simpleDataLake.read(mytable).option(data=2020-01-01)
数据湖内部会读取应该读的parnet,并在schema上做进一步处理
ID将data与metadata的列名做一一对应
各有所长
介绍三个项目:iceberg; Hudi; Delta Lake
Iceberg工作重点
well-designed Matadata Layer
Hidden Partition
Hudi
Tiemline Service & Upsert & Incremental
对upsert的操作信息存储在Timeline Service,然后通过Incremental Consume 增量的从某一时刻读取Timeline Service的信息,根据信息读数据进行读取,最后返回给用户
Copy on Write
含义:将更新一个分区时,把原来的数据全部读出来,然后进行加工,最后全部写回去;为了实现同时度新旧版本
Merge On Read
在提高更新操作后,对于数据变化信息存储在另一个Incremenal文件中,最后在读的时候将data文件和个Incremenal文件一起merge读取出来
读取时,根据选列方式找到对应的列和pk那一列读取出来,将这两个列进行合并到一个小文件,读的时候把这个小文件和data文件进行合并。
Delta Lake工作重点
三个数据湖的异同
技术选型
字节数据湖场景-Feature Store
总结
- 1.学习了数据湖的概念,发展历史
- 2.学习了数据湖的核心技术,关于一个数据湖的设计
- 3.业内数据湖的项目简介以及相关技术解读
标题:数据湖三剑客详解 | 青训营笔记
网址:juejin.cn/