这是我参与「第四届青训营 」笔记创作活动的第10天.
下面我们来开启数据流部分。Parquet-高性能列式存储:过滤下推到存储侧,更好地压缩性能文件格式列存储,类似于CSV。背景介绍【大数据专场 学习资料四】第四届字节跳动青训营 - 掘金 (juejin.cn)
一、发展历史
1、数据湖发展阶段1-Hadoop
- HDFS存储不是直接以文件夹形式存储在磁盘上,而是存在一个我们看不见的地方,那个地方我们默认空间无限大,并且方便与其他用户共享。
数据分开存储像图中抖音和头条数据一样。
- 坏处:数据沼泽
1、没有记录文件的Schema(包括列名、列类型),经常使用Schema on Query的方式用户自己知道schema,这是不方便的,因为我们得提前掌握一些信息。
2、难以得知数据集包含了哪些文件,是通过什么样的分区组织的。
3、如果多个程序都在修改这个数据集(修改数据、表结构),其他程序难以配合做修改。
2、数据湖发展阶段2-Hive
为了解决Hadoop坏处,Hive应运而生。
- Metastore将信息集中存储到MySQL中。
3、数据湖发展阶段3-湖仓一体LakeHouse
- 数据湖主要是存储数据,数据仓库随时用随时存 它是结构化的。
4、业界三大数据湖
1、Hudi
2、Icebery
3、Delta Lake
5、关于数据湖
- 相关概念比较新,且一直处在演进中。面对技术我们该用发展的眼光来对待。有些设施现在没有不代表以后没有。
- 一开始是HDFS、裸PB、TXT日志等,叫数据湖(管不动叫数据沼泽)。后来出现了上面的三种,数据湖概念就基本等于这些产品了。
二、核心技术
我们设计一个简单的数据湖。
1、文件结构
2、Time Travel
要求:
1、每次写入都生成一个新的元数据文件,记录变更。
2、分区数据在Update时,不要删除旧数据,保证新旧数据共存。
3、元数据中存储具体的文件路径,而不仅仅是区分文件夹。
右面代码是Contains聚合代码。
3、Transaction
4、原子性
Commit:重命名成功
5、事务隔离
6、Schema Evolution 进化
4问题答案,删完又加回来,因为ID是唯一的。
drop可读所有,也可选读几列,这是列存储特点。
三、各有所长
1、Icebery 工作重点
filter读某分区数据,快速裁剪定位到某文件上。 (1)Well——designed Matadata Layer
(2)Data File Filter
- Matadata layer是jSON文件
- Date layer是Partition文件 (3)Hidden Partition
(4)Hudi
(5)Timeline Service & Update & Incremental
(6)Copy on write
把一万列都读出来,找到要找的那列,内存中要把那列更新好,然后再把一万行写会取顺便改那行。
(7)Merge On Read
只读那一行,然后写道一个小文件里,到时候和那个一万行元数据的表一起读这两个文件。
2、Delta Lake工作重点
(1)流批一体