数据湖的概念最早是2011年提出来的,最初数据湖是数据仓库的补充,是为了解决数据仓库漫长的开发周期,高昂的开发、维护成本,细节数据丢失等问题出现的。
数据湖大多是相对于传统基于RDBMS的数据仓库,而从2011年前后,也就是数据湖概念出现的时候,很多数据仓库逐渐迁移到以Hadoop为基础的技术栈上,而且除了结构化数据,半结构化、非结构数据也逐渐的存储到数据仓库中,并提供此类服务。这样的数据仓库,已经具有了数据湖的部分功能。
关于数据湖的定义,维基百科上是这样讲的:数据湖(Data Lake)是一个以原始格式存储数据的存储库或系统。它按原样存储数据,而无需事先对数据进行结构化处理。一个数据湖可以存储结构化数据(如关系型数据库中的表),半结构化数据(如CSV、日志、XML、JSON),非结构化数据(如电子邮件、文档、PDF)和二进制数据(如图形、音频、视频)。
但是随着大数据技术的融合发展,数据湖不断演变,汇集了各种技术,包括数据仓库、实时和高速数据流技术、数据挖掘、深度学习、分布式存储和其他技术。逐渐发展成为一个可以存储所有结构化和非结构化任意规模数据,并可以运行不同类型的大数据工具,对数据进行大数据处理、实时分析和机器学习等操作的统一数据管理平台。
结合目前开源的数据湖平台和组件,总结数据湖的基本参考架构如下:
1)接入不同数据源,包括数据库中的表(关系型或者非关系型)、各种格式的文件(csv、json、文档等)、数据流、ETL工具(Kafka、Logstash、DataX等)转换后的数据、应用API获取的数据(如日志等);
2)自动生成元数据信息,确保进入数据湖的数据都有元数据;
3)提供统一的接入方式,如统一的API或者接口;
数据湖存储的数据量巨大且来源多样,数据湖应该支持异构和多样的存储,如HDFS、HBase、Hive等;
数据湖中拥有海量的数据,对于用户来说,明确知道数据湖中数据的位置,快速的查找到数据,是一个非常重要的功能。
1)自动提取元数据信息,并统一存储;
2)对元数据进标签和分类,建立统一的数据目录;
3)建立数据血缘,梳理上下游的脉络关系,有助于数据问题定位分析、数据变更影响范围评估、数据价值评估;
4)跟踪数据时间旅行,提供不同版本的数据,便于进行数据回溯和分析;
1)对于接入的数据质量管控,提供数据字段校验、数据完整性分析等功能;
2)监控数据处理任务,避免未执行完成任务生成不完备数据;
1)对数据的使用权限进行监管;
2)对敏感数据进行脱敏和加密;
提供一系列数据分析工具,便于用户对数据湖的数据进行自助数据发现,包括:
联合分析;
交互式大数据SQL分析;
机器学习
BI报表
…
数据仓库是一种具有正式架构的成熟的、安全的技术。它们存储经过全面处理的结构化数据,以便完成数据治理流程。数据仓库将数据组合为一种聚合、摘要形式,以在企业范围内使用,并在执行数据写入操作时写入元数据和模式定义。数据仓库通常拥有固定的配置;它们是高度结构化的,因此不太灵活和敏捷。数据仓库成本与在存储前处理所有数据相关,而且大容量存储的费用相对较高。
相比较而言,数据湖是较新的技术,拥有不断演变的架构。它是一个集中式存储库,允许以任意规模存储所有结构化和非结构化数据。根据定义,数据湖不会接受数据治理,但专家们都认为良好的数据管理对预防数据湖转变为数据沼泽不可或缺。数据湖在数据读取期间创建模式。与数据仓库相比,数据湖缺乏结构性,而且更灵活;它们还提供了更高的敏捷性。在检索数据之前无需执行任何处理,而且数据湖特意使用了便宜的存储。
根据要求,典型的组织将需要数据仓库和数据湖,因为它们可满足不同的需求和使用案例。
数据仓库本质上其实就是一个优化的数据库,用于分析来自事务系统和业务线应用程序的关系数据。事先定义数据结构和 Schema 以优化快速 SQL 查询,其中结果通常用于操作报告和分析。数据经过了清理、丰富和转换,因此可以充当用户可信任的“单一信息源”。
数据湖有所不同,因为它存储来自业务线应用程序的关系数据,以及来自移动应用程序、IoT 设备和社交媒体的非关系数据。捕获数据时,未定义数据结构或 Schema。这意味着您可以存储所有数据,而不需要精心设计也无需知道将来您可能需要哪些问题的答案。可以对数据使用不同类型的分析(如 SQL 查询、大数据分析、全文搜索、实时分析和机器学习)来获得见解。
随着使用数据仓库的组织看到数据湖的优势,他们正在改进其仓库以包括数据湖,并启用各种查询功能、数据科学使用案例和用于发现新信息模型的高级功能。
总结:
1)数仓中保存的都是结构化处理后的数据,而数据湖中可以保存原始数据也可以保存结构化处理后的数据,保证用户能获取到各个阶段的数据。因为数据的价值跟不同的业务和用户强相关,有可能对于A用户没有意义的数据,但是对于B用户来说意义巨大,所以都需要保存在数据湖中。
2)数据湖能够支持各种用户使用,包括数据科学家这类专业的数据人员。
3) 数据仓库的数据进入这个池之前是预先分类的,这可以指导其后面如何进行数据的分析。但在大数据时代,这些都是素材而已,你根本不知道以后如何用它,而数据湖给后面的数据分析带来了更大的弹性。因此,这个放大数据的仓库,专家建议叫数据湖,以区别于数据仓库。
看来,近两年数据湖是构造企业差异化竞争的很好思路,而Hadoop是目前流行的实现手段。
但是,之前为什么用Hadoop呢?因为在当前,Hadoop是实现数据湖的最常用技术手段,但以后也许有更好的方式。也就是说,数据湖是一个概念,而Hadoop是实现这个概念的技术手段。