数据湖(Data Lake)是一个存储企业的各种各样原始数据的大型仓库,其中的数据可供存取、处理、分析及传输。数据湖是以其自然格式存储的数据的系统或存储库,通常是对象blob或文件。数据湖通常是企业所有数据的单一存储,包括源系统数据的原始副本,以及用于报告、可视化、分析和机器学习等任务的转换数据。数据湖可以包括来自关系数据库(行和列)的结构化数据,半结构化数据(CSV,日志,XML,JSON),非结构化数据(电子邮件,文档,PDF)和二进制数据(图像,音频,视频)。
注意:数据湖是一个概念,而Hadoop是用于实现这个概念的技术,不能混为一谈。
总的来说,数据湖更像是数据仓库的原始数据层。而数据仓库从数据湖中抽取数据加工处理后,通过维度或者是范式建模等方式规范化数据湖里的数据。
其实这个是重点,现在很流行的基于分布式文件系统构建的三个数据湖系统:Delta Lake、Hudi、Iceberg。
这三个开源项目本质上解决的痛点是:
这几点里最核心的概念应该支持流处理的写入。以往由于批处理和流处理的不同数据处理的特点,导致了批处理和流处理会选择不同的存储引擎去存储数据。而 HDFS 囿于本身架构设计的原因对小文件的问题一直都没解决。Delta Lake、Hudi、Iceberg 都在往这个方向迈出了一大步。
关于 Delta Lake、Hudi、Iceberg 的,网上的文章比较多,感兴趣的可以参考文末的链接。在这里简单地评论一下这三者。
Delta Lake、Hudi、Iceberg 在某种程度上都解决了在分布式文件系统上实现流处理更新的问题,通过使用 meta 文件管理数据和后台进程合并文件的操作,尽可能地解决了像 HDFS 这样的分布式文件系统普遍存在的小文件的问题。至于未来,能否战胜 Kudu 、TiSpark 这样的对手还是要画一个问号的。