AWS 数据湖十年,云计算老大哥的磨刀之路

从 2006 年上线至今,AWS 已经走过了十几个年头。亚马逊在一个周围懵懂的时代里,拉开了云计算的大幕。AWS 位于 Gartner 魔力象限云计算 的领导者坐标系,和竞争对手的差距拉的比较大,它在前瞻性上的优势,一直遥遥领先。

数据湖,也是亚马逊发展了近十年的一项技术。AWS 每一次变革和成长,都在云计算的历史中写下了自己的足迹,成绩令人瞩目。而云上数据湖,经过十年的酝酿,将会产生什么样的推动力呢?

什么是数据湖?

AWS 的定义也不止一个,在众多的 AWS re:Invent 演讲中,我们看到了以下定义:

  1. re:Invent 2016:What is a Data Lake? A “Data Lake” is a repository that holds raw data in its native format until it is needed by down stream analytics processes.
  2. re:Invent 2018:Defining the AWS Data Lake Data lake is an architecture with a virtually limitless centralized storage platform capable of categorization, processing, analysis, and consumption of heterogeneous datasets。

对于数据湖的定义,业界并没有完全一致的说法。大多数人提起数据湖,也会或多或少的提到 Pentaho 公司的创始人詹姆斯·狄克逊 (James Dixon),在 2010 年的时候,他在他的一篇名为” Hadoop 和数据湖 “的博客中写道:”我们创造了一个新概念:数据湖。数据湖是一种比数据集市更自然的数据存储理念,即在系统或存储库中以自然格式存储数据的方法。“

总的来说,AWS 认为”数据湖“需满足 以下特征

  • 集中式存储,满足”a single source of truth“ 唯一真知来源原则
  • 收集和存储任何类型的数据,包括结构化、半结构化、非结构化以及原始数据
  • 快速轻松地执行新类型的数据分析
  • schema-on-read 读时校验模式,而非写时模式
  • 低成本存储
  • 计算和存储分离
  • 保护数据并防止未经授权的访问

数据湖的理念非常适合现在的互联网业务。

大数据不仅体现在数据体量爆炸性增长,而且结构化数据、非结构化数据、半结构化数据混存,因此现在的各种互联网业务产生的日志文件、图像文件、点击流、社交媒体、物联网传感器等等,都可以以原始形式放入数据湖中,同时也屏蔽了底层异构数据源。这也是传统数仓做不到的。

数据可以很轻松进入数据湖,用户也可以延迟数据的采集、数据清洗、规范化的处理,在读取的时候再灵活地以各种方式分析数据,得到运营报告,或者能执行实时分析和机器学习任务从而得到关于未来的预测结果。传统的数仓,因为模型范式的要求,业务不能随便的变迁,变迁涉及到底层数据的各种变化,没法支持业务变化。对于数据湖来说,尤其像互联网行业中新的应用,不断的发生变化,它的数据模型也不断的变化。相对来说,数据湖就更加的灵活,能更快速的适应上层数据应用的变化。

现在很多企业都建立了用于报告和分析目的的数据仓库,使用各种来源的数据,包括自己的交易处理系统和其他数据库,但建立和运行数据仓库和大数据框架既复杂又昂贵。当数据量增长或者需要向更多用户提供分析和报告时,如果不想在昂贵的升级过程上投入过多人力和精力,就需要选择更现代的架构设计以实现更低成本的存储和查询。

从 HDFS 到 S3 的核心转换

2006 年,AWS 正式推出了 S3(Simple Storage Service),亚马逊的第一个云产品。Amazon S3 从此已成为事实上的云存储标准。

2006 年,Hadoop 推出。HDFS 是分布式存储理念的产物,MapReduce 是 Hadoop 分布式计算框架的组成部分。HDFS 提供跨集群中多个计算节点的数据分发,非常适合管理不同类型的数据源。因此,它为企业数据湖奠定了基础。

为了兼容 Hadoop 集群,AWS 在 2009 年推出了 Amazon Elastic MapReduce(EMR)数据湖架构,以跨 EC2 实例集群自动置备 HDFS。在当时,这曾是企业在 AWS 之上构建数据湖的最佳选择。

EMR 包含了几乎所有的 Hadoop 生态体系中的核心组件,能够满足用户各种各类的数据分析需求。在运维层面,AWS EMR 帮助用户自动完成了计算资源准备,操作系统安装,Hadoop 组件安装,组件配置等一系列繁琐重复的工作。

EMR 更重要的创新,是提出计算与存储分离思想, 以 S3 存储作为底层提供与 Hadoop 生态计算框架无缝集成的方案作为 HDFS 的替代,给出了不一样的可行方案。因为 S3 限于 5 GB 对象,企业需要将 HDFS 跨多个具有附加 Elastic Block Store 卷的 EC2 实例分布,企业才可以创建更大的数据湖。此后,Amazon 扩展了 S3 以支持 5 TB 对象,用户可以将数据聚合到 PB 级的存储桶中。这使得用户更容易在 S3 上而不是 HDFS 上构建更大的数据湖。

Hadoop 采用了存储计算一体化的方法。因为当时主流网络带宽只有 100Mb,通过网络远程访问数据实在是太慢了。为了解决数据的快速访问,Google 创造性地提出来了计算和存储耦合的架构,Hadoop 延续了这个架构。但是十年过去后,网络带宽增长了一百倍,已经达到了 10G 以上,IO 不再是大数据的瓶颈,计算才是,计算存储分离带来的弹性扩展和成本优势渐渐明显。

大数据和云计算,在未来的发展方向上,终于通过”数据湖“融合到了一起。

AWS 的云服务天生具有存储计算分离的特性,且能自动伸缩 CPU 和存储资源。云的优势随着时间的流逝慢慢呈现出来,AWS data lake 存储的核心也慢慢转为 S3。

之后 AWS 于 2012 年推出了 Redshift ,业界第一款云端 MPP 架构的数据仓库云服务。随着产品的迭代,今天的 Amazon Redshift 可以通过 Spectrum 引擎将查询扩展到 Amazon S3 数据湖,带来了 EB 级数据湖分析:Redshift Spectrum 是 Redshift 的一种功能,可以帮助用户针对 Amazon S3 中的 EB 级数据运行查询,无需加载或转换任何数据。用户因此可以将 S3 用作高度可用、安全且划算的数据湖,以开放数据格式存储无限数据。

AWS 数据湖生态体系

数据湖的数据分析完整流程有收集,存储,分析,应用四个大的阶段,这四个阶段也是数据湖建设的必要路径。他们之间没有绝对的先后次序,没有必要等所有数据都收集好了才开始后面的步骤,在建设阶段的初期应该就要搭建好基本的数据分析管道,后期在此基础之上再根据数据分析业务的需求进行丰富和增加。AWS 数据湖的建设过程中各个阶段所采用的技术生态系统如下图所示:

从图中可以看出除了主要的四个阶段功能服务外,AWS 数据湖还为用户提供了一系列的管理工具, 以松耦合的方式与 S3 作为核心存储的数据湖紧密集成,提供企业级整体方案。

用户可以利用 Glue Catalog、Macie,Dynamodb,Amazon ES 等工具来进行元数据管理,把数据都按照层级和业务上的逻辑关系组织起来,方便后续的分析使用。

在对外提供数据分析服务能力时,API Gateway 可以帮助用户以 API 的方式轻松暴露数据湖内部的数据和处理能力,同时搭配 IAM 和 Cognito 完成用户的身份认证和权限控制。

在安全方面,Security Token Service 负责提供临时的访问凭证,CloudWatch 则帮助监控数据湖的运行状况,事后审计的工作则有 CloudTrail 来完成。同时用户也可以使用 KMS 来托管或者生成密钥来对数据湖的数据进行加密保护。

不难看出,随着时间的演变, Amazon S3 已经作为 AWS 数据湖方案的存储核心服务。在计算与存储分离理念的基础上,AWS 的其它服务都采用了松耦合的设计与 S3 在数据湖场景进行了紧密集成与创新。这也包括数据湖构建必不可少的计算集群。

EMR 作为第一代围绕 Hadoop 生态计算组件设计的数据湖计算服务采取了“托管平台” 的设计定位,服务依托与底层服务器集群构建,意在解决开源生态集群部署与维护升级繁杂的痛点。随着云计算的进步与互联网技术的潮流演进,无服务器这一理念逐渐在被大家知道并获得广泛认可,数据湖的 计算资源也经历了相同的演进路线 ,从集群化到无集群化。

为了提升效率,降低复杂度。在面对数据湖的典型 ETL 和 Ad-hoc Query 场景时,AWS 推出了 Glue 和 Athena 两项重量级服务。他们都是基于无服务器架构的托管服务,用户不需要关心后台的计算和存储资源,只要通过访问接口进行操作即可。

其中 Glue 负责数据的元数据管理以及 ETL 的工作,用户定义好 crawler 程序,程序会解析存储在 S3 上的文件内容并推断出相应的 Schema,自动完成元数据的获取,并且该元数据可以共享给 Redshift,Athena,EMR 等数据服务使用,帮助它们快速地了解数据湖中数据的结构并加以使用。随后通过 Glue 提供的脚本或者是自己编写的脚本(支持 python 和 Scala)来完成数据的抽取,转换和加载。

Athena 主要应对 Ad-hoc Query 类需求,用户通过它运行标准的 SQL 语句就能直接查询存储在 S3 中的数据,而不用构建和管理底层的计算资源,同时也只需要为查询期间使用的资源付费。结合到列式存储,分区,压缩等手段,能进一步提高 Ad-hoc Query 的性能并降低成本。此外 Athena 还可以对接 QuickSight 完成多种类型的数据可视化任务。

2018 年,AWS 在 re:Invent 会议上首次宣布了云数据湖托管 Lake Formation,并于今年 8 月 8 日正式投入商业使用。AWS Lake Formation 简化了数据湖的创建和管理工作,以前搭建完整的数据湖需要数月的时间,通过 Lake Formation 可以很好的简化搭建操作。且无需通过用户、组或存储桶策略授予 S3 访问权限,它提供了一个集中式控制台,用于授予和审核对数据湖的访问权限。

至此,AWS 形成了一套比较成熟完整的数据湖技术体系。

数据湖未来进展

我们每天产生的数据中,有 90% 的数据 属于非结构化数据,并且每年以 55%至 65%的速度在增长。这些数据以前难以存储、搜索和分析,现在利用数据湖和 AI 技术,才慢慢呈现出作用。尤其是 AWS 提供了一系列的机器学习服务,以及可以轻松地在数据湖上运行的工具,为用户提供诸如个性化建议,容量规划,供应链预测等,从而使企业在激烈的竞争环境中进一步得到发展,数据湖的作用在未来也肯定越来越重要。

目前已经有了一些应用 AWS 数据湖的案例,比如,用户超三千万的 小红书使用数据湖 存储海量的日志数据和来自社区的图片、评论、表情等非结构化数据来分析用户的喜好。千万用户级别的 流利说通过使用数据湖 ,建立了大型“中国人英语语音数据库”,在此基础上开发英语口语评测、英语写作打分引擎和深度自适应学习系统。

在未来,AWS 计划提供更好的可靠性,更好的扩展性,更安全合规的满足企业级需求,并做到与开源社区各种计算框架更好的集成。 几年以后可能 Hadoop 退出历史舞台,不再是主流计算框架,被 spark/flink 替代,应用调度 yarn 被 k8s 替换,未来新的框架肯定会兼容 S3,S3 作为数据湖继续提供强大的存储将会是常态。