数据湖介绍 | 青训营笔记

111 阅读3分钟

数据湖介绍 | 青训营笔记

这是我参与「第四届青训营 」笔记创作活动的的第13天

上几节课我们学习了HDFS,HDFS通过将文件分块来存储大文件,HDFS的组件由NameNode和DataNode,分别负责提供元数据和数据服务,在读/写数据时,HDFS客户端需要先从NameNode上获取数据读取/写入的DataNode地址,然后和DataNode交互来完成数据读/写,这节课我们就来讲讲数据胡的三剑客:Delta LakeHudiIceberg

发展历史

数据湖发展阶段

数据胡最开始的概念————分布式存储HDFS,这是使用目录来区分不同的数据集,由同一公司可以使用共享存储,数据访问方便,灵活性高等优点,也有没有记录文件的schema,难以得知数据集包含了哪些文件等缺点,可以说是数据沼泽

接着出现了Hive Metastore,可以对数据胡中的数据集进行集中”定义“,即得知数据胡中存在了哪些数据集,它们都存储在什么目录等,如果一张hive表是静态的,没有新增写入,则所有读取方都能很便捷的使用,但问题是不可能都是静态表

现在的数据湖都是湖仓一体的,这既结合了数据湖和数据仓库的优势,将数据仓库中对于数据的严格管理直接实现到了低成本的分布式存储之上

数据湖的相关概念比较新,一直处在演进当中,一开始是HDFS,裸pb、txt日志等等,叫数据湖,后来出现了Iceberg、Hudi、Delta,数据湖概念就基本等于这些产品了,也更贴近于Lakehouse的概念

核心技术

当我们写入数据湖时,要按照每条数据的date进行分区,并额外使用metadata文件记录表信息,如右图所示

image.png

而每次写入都要生成一个新的元数据文件,记录变更,分区数据在update时,不要删除旧数据,保证新旧共存,元数据中存储具体的文件路径,而不仅仅时分区文件夹

而在数据库写入或更新资料的过程中,为保证事务时正确可靠的,就必须要ACID特征,即原子性(Atomicity)一致性(Consistency)事务隔离(Isolation)持久性(Durability),具体的

事务隔离

最新的update版本,首先进行获取需要Update的分区,之后乐观锁先把该写入的文件全落盘,然后进入写json阶段,之后就要分几种情况讨论了 1.发现版本号一致,就继续写 2.版本号不一致,就进行分区的检查和更改

总结场景

目前的数据湖基本就是指Iceberg、hudi、delta lake”三大件“,三个的异同如下表

image.png

技术选型

我们要根据实际情况来选择,短期来看:每个项目都有一些属于自己的功能:

  • 如果强需求upsets,Hudi是最好的选择。
  • 如果希望可扩展性强,那么设计优良的Iceberg是最好的选择
  • 如果希望用上Z-Order等优化,那么就掏钱买Databricks的企业版Delta

长期来看:数据湖取代Hive,成为HDFS上的表格式标准是必然的。

总结

数据湖的最新发展状态时湖仓一体,数据湖以低存储成本提供了ACID Transaction、Schema evolution、 Time traverl等高级功能