这是我参与「第四届青训营 」笔记创作活动的第8天
数据湖的历史
一、hadoop HDFS
优点:
- 可以实现分布式存储
- 不同目录区分数据集,
缺点:
- 不能做到多个人同时去修改HDFS里的数据
- 无法知道HDFS里数据schema是什么样的
二、HDFS→HIVE数据仓库
优点:
- 相比于HDFS,可以知道HDFS里的数据格式schema是什么样的
缺点:
- 建好表以后,不能对schema进行变更,比如删掉一列这种操作
- 依然不能多人同时修改、读写
三、HIVE数据仓库→湖仓一体
首先什么是数据湖?数据湖和数据仓库有啥区别?
- 数据仓库要保证存算一体,然后又要保证数据是结构化的,成本比较高,随时需要拿出来计算
- 数据湖主要是负责存数据,格式也没有结构化的要求,直接存原始数据,并且不需要计算的
现在湖仓一体就是结合两者的优点,数据湖存储成本很低,数据仓库存结构化的数据,我们直接把数据仓库对数据的严格要求实现到低成本的分布式存储上
数据湖三剑客:Hudi、Delta Lake和IceBerg
这里就主要讲一下IceBerg,因为这是netflix公司开发的,对netflix比较感兴趣
IceBerg的发展历史
原本netflix是用hive作为数据仓库使用的,但是发现hive有很多缺陷:
- Netflix采用Hive时按照时间字段做partition,他们发现仅一个月会产生2688个partition和270万个数据文件。他们执行一个简单的select查询,发现仅在分区裁剪阶段就耗费数十分钟
- 他们发现即使在开启Hive ACID情况下,仍有很多细小场景无法保证原子性
- 他们发现Hive Memstore没有文件级别的统计信息,这使得filter只能下推到partition级别,而无法下推到文件级别,对上层分析性能损耗无可避免
于是,netflix就自己开发了一套轻量级的数据湖IceBerg
- 有个有意思的特点,iceberg可以动态调整选择date还是hour分区,iceberg可以随时变更并且把数据根据需要进行分区,这个就叫Hidden partition
- 然后支持filter下推到文件级别
- acid支持