亚马逊AWS官方博客
在亚马逊云科技上构建智能湖仓
原文链接:
https://aws.amazon.com/cn/blogs/big-data/build-a-lake-house-architecture-on-aws/
通过将不同结构、不同类型、不同来源的相关数据汇总起来并加以分析,用户能够得出更深刻、更丰富的洞察见解。为此,用户需要从不同孤岛中获取所有数据、将其聚合至统一位置(也就是人们常说的「数据湖」),再以此为基础执行分析与机器学习。但在其他用例中,用户也会将数据放置在其他专用存储体系之内,例如存储在数据仓库内以针对结构化数据执行复杂查询并快速获得结果;或者存储在搜索服务中以快速搜索/分析日志数据,进而监控生产系统的运行状况。无论如何,要想从这些数据中获取最佳洞见,用户必须有能力轻松在数据湖与专用存储系统之间移动数据。但随着系统中数据规模的持续增长,数据移动也变得越来越困难。为了解决这一挑战、进而从数据中获取最大收益,亚马逊云科技提出了Lake House“智能湖仓”方案。
在本文中,我们将共同了解如何在亚马逊云科技的云平台上构建智能湖仓,借此从指数级增长的海量数据中获取洞见,并帮助您快速灵活做出决策。这套智能湖仓方案首先指定中央数据湖,再围绕数据湖建立专用数据服务环,同时提供轻松易行的数据往来移动能力,帮助用户从容运用数据资源以及蕴藏其中的重要价值。
智能湖仓方案
作为一类现代化数据架构,智能湖仓方法不仅强调将数据湖与数据仓库集成起来,同时也涉及将数据湖、数据仓库以及所有其他专用服务接入统一且连续的整体。数据湖为我们提供对主体数据的分析环境,而专用分析服务则负责以令人满意的速度为您提供具体用例支持(例如实时仪表板与日志分析功能)。
本文中的智能湖仓方案包含以下几大关键要素:
- 可扩展数据湖
- 专用数据服务
- 无缝数据移动
- 统一治理机制
- 高效率低成本
下图所示,为真实客户数据与常见数据迁移需求(包括数据分析服务与数据存储间的数据迁移、由内向外、由外向内、周边移动等情况)共同建立的智能湖仓方案。
这样一套分层与组件化数据分析架构,使您可以通过正确的工具完成正确的任务,同时提供以迭代及增量方式构建架构的良好敏捷性。在添加新数据源、发现新的用例/需求以及开发新的分析方法时,我们可以更灵活地调整智能湖仓中的相应组件,借此满足当前及未来的各类需求。
对于我们的这套智能湖仓架构,您可以把它组织成一套五层逻辑堆栈,其中各个层对应着负责满足特定需求的专用组件。
下面,我们将具体介绍这五个层级。但在此之前,不妨先来聊聊智能湖仓架构的数据来源。
数据源
这套智能湖仓架构可供您摄取并分析来自不同来源的数据。无论是业务线(LOB)应用、ERP应用还是CRM应用,大部分数据源都会以固定的间隔生成高度结构化的批量数据。除了内部结构化来源之外,您还可以从现代数据源(例如Web应用程序、移动设备、传感器、视频流以及社交媒体等)处接收数据。这些现代数据源往往会以连续数据流方式生成半结构化乃至非结构化数据。
数据摄取层
智能湖仓架构中的摄取层,负责将数据摄取至智能湖仓的存储层内。它会借助各类协议接入内部及外部数据源,批量或实时摄取数据,再将结果传送至数据仓库乃至智能湖仓存储层的数据湖组件中。
数据存储层
智能湖仓架构中的数据存储层,负责提供持久、可扩展且具有良好成本效益的组件,用以存储及管理大量数据。在智能湖仓架构中,数据仓库与数据湖将原生集成以提供经济高效的存储层体系,用以支持非结构化以及高度结构化和建模数据。存储层会按照不同消费就绪状态对存储数据进行划分,具体包括原始数据、可信数据、丰富数据与建模数据。
数据仓库中的结构化数据存储
数据仓库中存储的是符合标准且高度可信的数据,具体结构化形式则包括传统的星形、雪花形、数据保管库乃至其他非规范化模式。仓库中存储的数据通常获取自高度结构化的内部与外部来源(例如交易系统、关系数据库以及其他结构化运营资源),而且往往以一定的规律保持运作。现代云原生数据仓库通常能够在内置的高性能存储卷中存放经过压缩的PB级列式数据。通过MPP引擎配合快速连接通道,现代云原生数据仓库能够为复杂SQL查询提供低延迟与高执行速度。
为了提供经过严格筛选、一致且受信的数据,在将数据存储至仓库之前,您需要首先通过提取、转换、加载(ETL)或者提取、加载、转换(ELT)管道对源数据进行预处理、验证及转换,借此建立起跨业务域的高可信度真实数据集源。
智能湖仓架构中的结构化与非结构化数据存储
数据湖,是一套用于存储并组织所有数据的集中式数据存储库。它支持以结构化、半结构化以及非结构化等形式存储数据,支持分层存储以高度优化成本,同时可自动扩展以容纳EB级海量数据。常见的数据湖被划分为登陆区、原始区、受信区与策划区几个部分,用于根据数据的消费就绪状态进行分别存储。通常,数据在摄取完成后会被原样存储在数据湖内(无需预先定义schema),借此加快摄取速度并缩短数据探索之前的准备时间。数据湖可以通过多种方法(包括大数据处理与机器学习)对各类数据集进行分析。数据湖与数据仓库间的原生集成,还允许您从仓库存储中移出大量访问频率较低的历史数据,借此降低存储成本。
目录层
目录层负责存储智能湖仓存储层内所托管数据集的业务与技术元数据。在智能湖仓架构中,目录由数据湖与数据仓库共享,并允许用户编写查询。这些查询将把存储在数据湖与数据仓库内的数据合并至同一SQL中,由此跟踪版本化schema与数据集的细粒度分区信息。随着数据集数量的增加,该层还提供搜索功能以保证智能湖仓中的数据集始终可被发现与查询。
智能湖仓接口
在智能湖仓架构中,数据仓库与数据湖在存储乃至公共目录层上保持原生集成,因此能够为处理及消费层提供统一的智能湖仓接口。以此为基础,智能湖仓的处理与消费层组件又可以通过统一的单个智能湖仓接口(例如SQL或Spark)使用存储层内存储的所有数据(分别存储在数据仓库与数据湖内)。这样的架构设计,使您无需沿任一方向在数据仓库及数据湖之间移动数据,即可访问智能湖仓中的所有存储数据。
数据仓库与数据湖间的原生集成,使您得以灵活执行以下操作:
- 将EB级别的结构化与非结构化数据存储在极具成本效益的数据湖之内,同时将经过高度策划、建模与整合的结构化数据存储在热数据仓库存储内。
- 利用Spark等单一处理框架通过单一管道合并并分析所有数据,包括数据湖中的非结构化数据与数据仓库中的结构化数据。
- 构建基于SQL的数据仓库原生ETL或ELT管道,将仓库中的平面关系数据与数据湖内复杂的多层结构化数据相结合。
数据处理层
智能湖仓架构的数据处理层组件负责通过验证、清洗、规范化、转换与扩充等方式将数据转换为可消费状态。处理层提供专用组件执行各类转换,包括数据仓库SQL、大数据处理以及近实时ETL等。
处理层提供与正确的数据集特征(包括大小、格式、schema、速度)、当前处理任务以及可用技术集(SQL、Spark)相匹配的专用组件,由此尽可能加快交付速度。处理层能够经济高效地扩展以处理大量数据,同时支持schema-on-write、schema-on-read、分区数据集以及多种数据格式。处理层还能够访问统一的智能湖仓存储接口与通用目录,由此访问智能湖仓中的所有数据及元数据,进而实现以下优势:
- 避免分析处理数据湖与数据仓库时可能导致的数据冗余、非必要数据移动以及ETL代码重复。
- 加快交付速度。
数据消费层
智能湖仓架构中的数据消费层负责提供可扩展的高性能组件,利用统一的智能湖仓接口访问存储层中的数据以及目录中的元数据。数据消费层还提供专用分析组件以全面开放分析功能,确保组织内的所有职能角色都能够通过交互式SQL查询、仓库式分析、商务智能仪表板以及机器学习等形式获取洞察见解。
消费层中的组件支持以下功能:
- 编写查询与分析/机器学习作业,访问及合并来自传统数据仓库的维度schema以及数据湖托管表(需要配合schema-on-read)。
- 处理以各种开放文件格式(例如Avro、Parquet或者ORC)存储的数据湖托管数据集。
- 在读取数据湖中托管的大型分区数据集时,通过分区裁剪优化性能与成本。
在本文的后续部分,我们将介绍一套参考架构,展示如何使用亚马逊云科技服务构建智能湖仓逻辑架构中的各个层。在这套方案中,亚马逊云科技服务将托管以下工作:
- 提供并管理可扩展、具有良好弹性、安全且成本效益出色的基础设施组件。
- 确保各基础设施组件彼此原生集成。
这套方案将帮助您将主要精力集中在以下工作身上:
- 快速建立数据与分析管道。
- 显著加快新数据的导入速度,并从数据中获取洞见。
- 支持多个用户角色。
亚马逊云科技平台上的智能湖仓参考架构
在以下章节中,我们将具体介绍各逻辑层的细节信息。
数据摄取层
智能湖仓参考架构中的摄取层包含一组专用的亚马逊云科技服务,负责将不同来源的数据摄取至智能湖仓存储层内。大部分摄取服务能够直接将数据传递至数据湖与数据仓库存储。此外,其中使用的定制化专用服务还能充分满足以下来源的连接性、数据格式、数据结构与数据速度等具体要求:
- 运营数据库源
- 软件即服务(SaaS)应用程序
- 文件共享
- 流式数据源
运营数据库源(OLTP、ERP、CRM等)
摄取层中的 AWS Data Migration Service (AWS DMS)组件能够接入多个运营RDBMS与NoSQL数据库,并将其中的数据摄取至数据湖内的Amazon Simple Storage Service (Amazon S3)存储桶中,或者直接摄取至Amazon Redshift 数据仓库的staging表。借助AWS DMS,您可以一次性导入源数据,然后再复制源数据库的数据持续变化。
SaaS应用程序
摄取层使用Amazon AppFlow 轻松将SaaS应用程序数据摄取至您的数据湖内。只需单击几下,您就可以在Amazon AppFlow中设置无服务器数据获取流。您的数据流可以接入多种SaaS应用程序(例如Salesforce、Marketo以及Google Analytics)、摄取数据,再将结果传递至智能湖仓存储层或者数据湖内的S3存储桶,也可以直接传递至Amazon Redshift数据仓库中的staging表。您可以调度Amazon AppFlow摄取流,或者根据SaaS应用程序内的事件进行即时触发。在将摄取数据传递至智能湖仓存储层之前,您还可以对数据内容加以验证、过滤、映射及脱敏。
文件共享
相当一部分应用程序会将结构化与非结构化数据存储在托管于网络附加存储(NAS)阵列上的文件中。AWS DataSync 能够从启用NFS与SMB的NAS设备中快速将数百万个文件、数百TB大小的数据摄取至数据湖登陆区内。DataSync不仅能够自动处理复制作业的脚本、调度并监控转移过程,还能够验证数据完整性并优化网络资源利用率。在完成一轮文件转移之后,DataSync还可监控并将后续发生变更的文件同步至智能湖仓。更重要的是,DataSync是一项完全托管服务,整个设置过程只需要几分钟。
流式数据源
摄取层使用Amazon Kinesis Data Firehose从内部或外部源处接收流式数据,并将其传递至智能湖仓存储层。只需单击几下,您就可以配置Kinesis Data Firehose API端点,供数据源发送流式数据——包括点击流、应用程序与基础设施日志及监控指标,以及设备遥测与传感器读数等物联网数据。Kinesis Data Firehose将执行以下操作:
- 缓冲输入流。
- 对数据进行分批、压缩、转换、分区与加密。
- 将数据作为S3对象传递至数据湖,或作为行传递至Amazon Redshift数据仓库内的staging表。
Kinesis Data Firehose为无服务器服务,不需要额外管理且提供成本模型,您只需要为通过该服务传输及处理的实际数据量付费。Kinesis Data Firehose会自动伸缩以适应传入数据的规模及吞吐量。在构建实时流式分析管道期间,摄取层会直接提供 Amazon Kinesis Data Streams。
智能湖仓存储层
Amazon Redshift与Amazon S3为本文中的智能湖仓参考架构提供了统一的原生集成存储层。一般而言,Amazon Redshift负责存储高度规范化、符合标准要求的可信数据,这些结构化数据遵循标准维度schema;对于其他结构化、半结构化与非结构化数据,则由Amazon S3提供EB级别的数据湖存储支持。但Amazon Redshift同样支持半结构化数据,供您在其中摄取及存储半结构化数据。Amazon S3则提供行业领先的可扩展性、数据可用性、安全性与性能表现。开放文件格式允许您使用多种处理及消费层组件对同一批Amazon S3数据执行分析。公共目录层在Amazon S3中负责存储结构化或半结构化数据集的schema。消费该S3数据集的组件通常会在读取数据集时,将这些schema应用于数据集(即schema-on-read)。
Amazon Redshift Spectrum 是原生集成智能湖仓存储层中的核心组成部分之一。Redshift Spectrum帮助Amazon Redshift提供一个统一的SQL接口,用以接收及处理SQL语句,并在同一查询内引用及合并托管在数据湖及数据仓库内的数据集。凭借数千个瞬态Redshift Spectrum节点配合Amazon Redshift的复杂查询优化功能,Amazon Redshift能够高效查询存储在Amazon S3中的PB级数据。Redshift Spectrum还能够查询S3数据湖内的分区数据,包括读取使用开源编解码器压缩的数据,并支持包括JSON、CSV、Avro、Parquet、ORC以及Apache Hudi在内的多种开源行或列式存储。关于更多详细信息,请参阅在Amazon Redshift Spectrum中为查询创建数据文件。
当Redshift Spectrum读取存储在Amazon S3中的数据集时,会将来自公共AWS Lake Formation目录的相应schema应用于数据(即schema-on-read)。借助Redshift Spectrum,您可以建立起执行以下操作的Amazon Redshift原生管道:
- 使用Redshift Spectrum将大量历史数据保留在数据湖内,并将最近几个月的热数据摄取至数据仓库中。
- 处理附加存储内的热数据与数据湖中的历史数据,由此生成丰富数据集,全程无需执行任何数据移动操作。
- 将丰富数据集插入至附加存储中的表内,或者直接插入由数据湖托管的外部表中。
- 轻松将大量冷门历史数据由数据仓库转移至成本更低廉的数据湖存储内,且仍保证将其作为Amazon Redshift查询的一部分以供轻松获取。
Amazon Redshift中的高度结构化数据通常负责为交互式查询及高度受信的即时商务智能仪表板提供支持;而Amazon S3内的结构化、非结构化与半结构化数据,则常被用于驱动机器学习、数据科学与大数据处理用例。
AWS DMS与Amazon AppFlow能够将数据从结构化来源直接传递至S3数据湖或Amazon Redshift数据仓库,充分满足用例的具体需求。在摄取数据文件之后,DataSync会将数据存储至Amazon S3。处理层组件可通过单一统一接口(例如Amazon Redshift SQL)访问统一智能湖仓存储层内的数据,并由接口使用Redshift Spectrum将Amazon Redshift集群中存储的数据与Amazon S3的数据加以合并。
在S3数据湖内,结构化与非结构化数据均被存储为S3对象。数据湖内的各S3对象会按存储桶或前缀名称被划分为登陆区、原始区、受信区及策划区等几种类别。对于将数据存储在S3数据湖内的管道,数据将从来源处被直接摄取至登陆区内。接下来,处理层将验证登陆区数据并将结果存储在原始区内或添加相应前缀以供永久存储。之后,处理层对原始区数据执行schema、分区以及其他转换,确保数据达到一致状态,处理后的结果被统一存储在受信区内。最后一步,处理层对受信区数据集进行建模,再将结果与其他数据集进行合并以实施策划,最终结果被存储在策划层内。通常,来自策划层的数据集会被部分或全部纳入Amazon Redshift数据仓库中,以支持那些要求极低访问延迟、或者需要运行高复杂度SQL查询的用例。
各个区内的数据集,通常会根据相应区(原始、受信或策划区)消费模式的匹配键进行分区。参考架构使用GZIP、BZIP以及Snappy等开源编解码器对数据集所对应的S3对象执行压缩,借此降低存储成本并缩短处理层与消费层内的组件读取时间。数据集通常以Parquet及ORC等开源列式存储格式存在,以进一步减少处理层与消费层组件查询某些列子集时所需读取的数据量。Amazon S3提供一系列针对不同用例设计的存储类。其中Amazon S3智能分层存储类专门用于在不影响性能或运营开销的前提下,自动将数据转移至最具成本效益的访问层内。
Amazon Redshift提供PB级数据仓库存储容量,用于存储按维度或非规范化schema建模的高度结构化数据。在Amazon Redshift上,数据将以高压缩比列式格式存储,并分布式存储在高性能节点集群上。各个节点最多提供64 TB高性能托管存储容量。Amazon Redshift会强制执行schema-on-write、ACID事务与工作负载隔离等机制,借此保障数据的高质量与一致性。用户大多在Amazon Redshift上存储高一致性、统一、可信且受控的结构化数据集,借此满足高吞吐量、低延迟与高并发性用例。当然,您也可以使用Amazon Redshift中增量式刷新的物化视图,以显著提高商务智能仪表板中复杂查询的性能与吞吐量。
在通过各种来源获取数据并构建智能湖仓时,我们一般可以直接在整个数据湖及数据仓库中托管数百甚至数千个数据集。中央数据目录将统一为智能湖仓存储(数据仓库与数据湖)内的全部数据集提供元数据,这将大大降低搜索难度、保证智能湖仓能够始终保持良好的数据发现能力。此外,这种将元数据由数据湖托管数据分离至统一中央schema的处理方式,还可帮助处理层/消费层组件及Redshift Spectrum轻松实现schema-on-read。
在本文的智能湖仓参考架构中,Lake Formation提供的中央目录负责存储智能湖仓中托管的全部数据集的元数据(无论数据集实际存储在Amazon S3还是Amazon Redshift内)。用户可以将全部数据集的技术元数据(例如版本化表schema、分区信息、物理数据位置以及更新时间戳等)与业务属性(例如数据所有者、数据管理者、列业务定义以及列信息敏感性等)存储在Lake Formation中。
大部分由数据湖托管的数据集,其schema都在不断变化、数据分区也在持续增加;而由数据仓库托管的数据集schema则大多以受控方式持续演进。AWS Glue crawlers能够跟踪数据湖托管数据集以及数据仓库数据集内不断变化的数据schema与新增分区,并在Lake Formation目录中为相应schema添加新的版本。此外,Lake Formation还提供API,供您使用自定义脚本及第三方产品实现元数据注册与管理。
Lake Formation为数据湖管理员们提供了中央管理位置,可以为数据湖内托管的数据库和表设置细化的表级与列级权限。在设置Lake Formation权限之后,用户和各分组只能使用多个处理层与消费层服务(例如AWS Glue、Amazon EMR、Amazon Athena以及Redshift Spectrum等)访问授权的表和列。
数据处理层
智能湖仓架构中的处理层提供多种专用组件,能够支持各类数据处理用例。为了匹配智能湖仓内各数据集的独特结构(平面表、多层或者非结构化)及速度(批量或流式),您可以灵活选择不同的专用处理组件。各个组件都能够面向Amazon S3与Amazon Redshift(统称为智能湖仓存储)读写数据。
我们可以使用处理层组件构建数据处理作业,这些作业将使用以下接口对存储在数据仓库及数据湖内的数据进行读写:
- Amazon Redshift SQL(配合Redshift Spectrum)。关于更多详细信息,请参阅无需加载,Amazon Redshift Spectrum将数据仓库库窬扩展至EB级别。
- 运行在Amazon EMR上的Apache Spark作业。关于更多详细信息,请参阅:
- 关于DataFrameReader 与 DataFrameWriter的Spark说明文档。
- GitHub上的用于Apache Spark的高效Redshift数据源——社区版 。
- 运行在AWS Glue上的Apache Spark作业。关于更多详细信息,请参阅:
您可以使用AWS Glue crawlers或Lake Formation API,将结果数据集中的元数据添加到Lake Formation中央目录内。
您也可以使用专用组件构建出能够实现以下功能的数据转换管道:
- 使用Amazon Redshift(配合Redshift Spectrum)、基于SQL的ELT
- 使用AWS Glue或Amazon EMR实现的大数据处理
- 使用Amazon Kinesis实现的近实时流式数据处理。关于更多详细信息,请参阅:
- 使用Spark Streaming在AWS Glue上实现近实时流式数据处理。关于更多详细信息,请参阅新增功能——使用AWS Glue实现无服务器流式ETL。
- 使用Spark Streaming在Amazon EMR上实现近实时流式数据处理。关于更多详细信息,请参阅:
基于SQL的ELT
要在智能湖仓存储层中转换结构化数据,您可以使用您所熟悉的SQL语义构建起功能强大的ELT管道。这些ELT管道将使用Amazon Redshift中的大规模并发处理(MPP)功能以及Redshift Spectrum功能启动数千个瞬态节点,即时将处理容量扩展至PB级别。Amazon Redshift上基于存储过程的这类ELT管道能够对以下对象进行转换:
- 由AWS DMS或Amazon AppFlow直接传递至Amazon Redshift staging表的平面结构化数据
- 使用开源文件格式(例如JSON、Avro、Parquet及ORC等)托管在数据湖内的数据
在数据丰富期间,这些管道还可以使用SQL语句将内部维度表与S3数据湖内托管的大型事实表(使用Redshift Spectrum层)连接起来。在最后一步中,数据处理管道可以将经过策划、丰富与建模的数据插入至Amazon Redshift内部表或存储在Amazon S3中的外部表内。
大数据处理
为了对智能湖仓存储层(Amazon S3与Amazon Redshift)上托管的大量半结构化、非结构化或高度结构化数据进行集成处理,您可以使用Apache Spark构建大数据处理作业,并在AWS Glue或Amazon EMR上加以运行。这些作业可以使用Spark的原生及其他开源连接器进行访问,并将Amazon Redshift中存储的关系型数据同Amazon S3中存储的复杂平面或分层结构化数据结合起来。处理完成后,这些作业可以将结果数据集存储回S3数据湖、Amazon Redshift数据仓库或者二者共同构成的智能湖仓存储层。
AWS Glue提供无服务器、按使用量计费的ETL功能,其ETL管道能够处理规模达数十TB的海量数据,且无需启动或管理任何服务器或集群。为了加快ETL开发,AWS Glue还能自动生成ETL代码并提供常用的数据结构与ETL转换(用于验证、清洗、转换及展平数据)。AWS Glue还提供内置功能,用于处理存储在Amazon Redshift以及S3数据湖内的数据。在同一作业之内,AWS Glue还可以加载并处理使用平面表格式存储的Amazon Redshift数据、以及其他使用常见开源格式(例如CSV、JSON、Parquet以及Avro)存储的S3数据湖托管数据集。AWS Glue ETL作业可通过公共Lake Formation目录(AWS Glue crawlers会爬取Amazon S3及Amazon Redshift以获取数据)访问这些数据,借此以统一方式引用Amazon Redshift与Amazon S3托管表。AWS Glue ETL还能够对分区数据执行增量处理。此外,AWS Glue也提供触发器与工作流功能,可用于构建包含作业依赖项、并发运行等多个步骤的端到端数据处理管道。
您可以自动扩展EMR集群,满足PB级别大数据处理管道的严苛资源需求。这些管道还可以使用不同的Amazon Elastic Compute Cloud (Amazon EC2)竞价实例队列,进一步改善资源成本优化效果。关于实例选项的更多详细信息,请参阅支持的实例类型。
运行在Amazon EMR上的基于Spark数据处理管道能够实现以下功能:
- Spark内置的读取器 与 写入器 能够处理采用多种开源格式的数据湖托管数据集。
- 开源Spark-Amazon Redshift连接器能够直接对Amazon Redshift数据仓库中的数据进行读取与写入。
要读取由数据湖托管的复杂结构化数据集schema,Amazon EMR上的Spark ETL作业可以接入Lake Formation目录。这是通过AWS Glue兼容性配合AWS身份与访问管理(IAM)策略共同实现,负责对指向AWS Glue表以及底层S3对象的访问进行分别授权。同样,Spark作业还可以使用Spark-Amazon Redshift连接器读取Amazon Redshift托管数据集的数据与schema。您也可以使用Spark及Apache Hudi构建高效的增量数据处理管道Amazon EMR。
近实时ETL
要执行多个现代分析用例,您需要以近实时方式执行以下操作:
- 摄取大量高频或流式数据
- 验证、清洗与丰富数据
- 将数据放入智能湖仓存储以供消费
您可以使用以下方法构建起能够轻松扩展、并近实时处理大量数据的管道:
- Amazon Kinesis Data Analytics for SQL/Flink
- 在AWS Glue或Amazon EMR上使用Spark Streaming
- 将Kinesis Data Firehose 与 AWS Lambda相集成
Kinesis Data Analytics、AWS Glue与Kinesis Data Firehose可帮助您建立起近实时数据处理管道,且无需创建或管理任何计算基础设施。Kinesis Data Firehose与Kinesis Data Analytics管道能够弹性扩展以匹配源吞吐量,而基于Amazon EMR与AWS Glue的Spark Streaming作业则可以根据指定的扩展参数、在几分钟内完成规模扩展。
基于Kinesis Data Analytics for Flink/SQL的流式管道通常会从 Amazon Kinesis Data Streams (位于我们智能湖仓架构的摄取层中)读取记录、对其进行转换,而后将处理完成的数据写入至Kinesis Data Firehose。Spark Streaming管道则通常从Kinesis Data Streams(位于我们智能湖仓架构的摄取层中)读取记录、对其进行转换,而后将处理完成的数据写入至另一Kinesis数据流,且后者又接入Kinesis Data Firehose交付流。Firehose交付流能够将处理后的数据交付至智能湖仓存储层内的Amazon S3或Amazon Redshift。要构建起简单、不涉及状态转换的近实时管道,您可以将数据直接摄取至Kinesis Data Firehose中,并使用Kinesis Data Firehose调用的Lambda函数对传入记录进行微批处理。Kinesis Data Firehose会将转换后的微批记录交付至智能湖仓存储层中的Amazon S3或Amazon Redshift。
凭借着将数据交付至Amazon S3与Amazon Redshift的能力,Kinesis Data Firehose得以为处理层中的近实时ETL管道提供统一的智能湖仓存储写入器接口。在Amazon S3上,Kinesis Data Firehose可以将数据存储在有效的Parquet或ORC文件中,您可以灵活使用ZIP、GZIP及Snappy等开源编解码器对这些文件进行压缩。
数据消费层
我们的智能湖仓参考架构提供多种专用AWS服务,能够让不同角色类型之间的数据消费方式互连互通,包括支持交互式SQL查询、商务智能与机器学习等多种分析用例。这些服务使用统一的智能湖仓接口访问存储在Amazon S3、Amazon Redshift以及Lake Formation目录中的所有数据与元数据。此外,各项服务还可以通过开放文件格式(例如JSON、Avro、Parquet以及ORC)使用Amazon Redshift表中存储的平面关系数据以及S3对象中存储的平面或复杂结构化或非结构化数据。
交互式SQL
要使用交互式SQL探索智能湖仓内存储的所有数据,商务分析师与数据科学家可以使用Amazon Redshift(配合Redshift Spectrum)或者Athena轻松实现。您可以运行SQL查询,这些查询会将Amazon Redshift集群中托管的平面、关系、结构化维度数据,连同Amazon S3中存储的TB级规模的平面或复杂结构化历史事实数据结合起来,而且允许在数据中使用JSON、Avro、Parquet以及ORC等开放文件格式。在Amazon S3中查询数据集时,Athena与Redshift Spectrum都将获取存储在Lake Formation目录中的schema,并将其应用于读取操作(schema-on-read)。您可以在Athena或Amazon Redshift各自的控制台上运行查询,也可以将面向JDBC或ODBC端点提交查询。关于更多详细信息,请参阅使用ODBC与JDBC驱动程序接入Amazon Athena,以及在Amazon Redshift中配置连接。
Athena能够针对存储在Amazon S3中的TB级数据运行复杂的ANSI SQL,而且您无需预先将其加载至数据库内。Athena具有无服务器特性,因此不存在需要设置或管理的基础设施,您只需要为运行查询所产生的数据扫描量付费。Athena还提供联合查询功能,允许在同一SQL查询中将Amazon S3托管的事实数据与Amazon Redshift集群内托管的维度表结合起来。Athena利用存储在Lake Formation目录内的数据集分区信息减少数据扫描量,由此更快提供结果并降低查询成本。您可以使用Athena CTAS语句存储重复的查询结果,这将进一步降低查询成本。
Amazon Redshift提供强大的SQL功能,可对智能湖仓存储(跨Amazon Redshift MPP集群与S3存储湖)内的超大型数据集进行快速在线分析处理(OLAP)。Amazon Redshift还提供功能强大的查询优化器,能够通过类似于PostgreSQL的语法编写出复杂的用户查询,并生成可在Amazon Redshift MPP集群与Redshift Spectrum节点队列(以查询Amazon S3中的数据)上运行的高性能查询计划。Amazon Redshift则提供结果缓存功能,可将同一查询的重复操作次数降低几个数量级,借此显著缩短查询运行时间。借助Amazon Redshift中的物化视图,您只需要对复杂join进行一次预先计算(后续以增量方式进行刷新),借此简化并加快用户所需编写的下游查询。Amazon Redshift还提供并发扩展,可在几秒钟内启动更多瞬态集群,借此支持几乎无限数量的并发查询。您可以将查询结果写入回Amazon Redshift原生表或者S3数据湖上托管的外部表(使用Redshift Spectrum)。
机器学习
数据科学家们往往需要探索、整理并特征化各类结构化与非结构化数据集,为机器学习模型的训练作业做好准备。智能湖仓接口(用于将Amazon Redshift与Athena及Spark接口配合使用的交互式SQL接口)能够为数据科学家提供以下功能,由此大大简化并加快数据准备进程:
- 统一的Lake Formation目录,用于搜索及发现智能湖仓存储中托管的所有数据。
- 基于Amazon Redshift SQL与Athena的交互式SQL功能,用于访问、浏览及转换智能湖仓存储中的所有数据。
- 基于Spark的统一访问机制,能够整理并转换智能湖仓存储中托管的所有数据集(包括结构化与非结构化),并将其转换为特征集。
接下来,数据科学家可以将Amazon SageMaker接入智能湖仓的存储层并访问训练特征集,借此完成机器学习模型的开发、训练与部署。
SageMaker是一项完全托管服务,提供一套名为SageMaker Studio交互式开发环境(IDE)以构建、训练及部署机器学习的各组件。在Studio中,您可以使用统一的可视化界面统一上传数据、创建新notebook、训练及调整模型、在各步骤间往来移动以调整实验过程、比较结果并将模型部署至生产环境中。关于更多详细信息,请参阅Amazon SageMaker Studio:第一款用于机器学习的完全集成开发环境。
SageMaker还提供托管Jupyter notebook,您只需单击几下即可启动notebook。SageMaker notebook提供弹性计算资源、git集成、轻松共享、预置机器学习算法、几十种现成机器学习示例以及AWS Marketplace集成功能,您可以轻松部署数百种经过预训练的算法。SageMaker notebook还预先配置了所有主要深度学习框架,包括TensorFlow、PyTorch、Apache MXNet、Chainer、Keras、Gluon、Horovod、Scikit-learn以及Deep Graph Library等。
各机器学习模型在SageMaker托管的计算实例上进行训练,其中也包括成本效益极高的EC2竞价实例。您可以使用SageMaker Experiments组织多项训练作业,也可以使用SageMaker的内置算法、自定义算法或AWS Marketplace提供的数百种算法构建训练作业。SageMaker Debugger则提供对于模型训练作业的完全可见性。最后,SageMaker也为机器学习训练作业提供强大的自动超参数调优选项。
只需要单击几下,您就可以将SageMaker训练完成的模型部署至生产中,并轻松通过一组完全托管EC2实例进行扩展。您可以在多种EC2实例类型中做出选择,并附加具有成本效益的GPU驱动实例实现推理加速。模型部署完成后,SageMaker即可监控关键模型指标以提高推理准确性,同时检测一切概念漂移迹象。
商务智能
Amazon QuickSight 提供无服务器功能,可供您轻松创建并发布包含丰富信息的交互式商务智能仪表板。商务分析师们可以使用Athena或Amazon Redshift的交互式SQL接口,通过智能湖仓存储中的数据为QuickSight仪表板提供素材支持。此外,您也可以直接将QuickSight接入可操作数据库(例如MS SQL、Postgres)以及各类SaaS应用(例如Salesforce、Square以及ServiceNow等)。为了保证仪表板拥有出色的性能表现,QuickSight还提供一款名为SPICE的内存缓存与计算引擎。SPICE能够自动复制数据以实现高可用性,允许成千上万用户同时执行快速交互式分析,并有效保护底层数据基础设施。
QuickSight凭借开箱即用、自动生成的机器学习洞见(包括预测、异常检测与叙述重点等)极大丰富了仪表板信息与视觉效果。QuickSight与SageMaker原生集成,可在商务智能仪表板上实现其他基于机器学习模型的自定义洞见。您可以使用QuickSIght应用程序经由任意设备访问QuickSight仪表板,也可以将仪表板灵活嵌入至Web应用程序、门户与网站中。QuickSight能够自动扩展至成千上万用户,并以经济高效的按会话计费方式提供极具性价比的服务体验。
总结
基于专用服务组合建立的智能湖仓架构将帮助您从海量数据中快速获取面向所有用户的洞察见解,同时充分预留升级空间,供您随后续发展随时引入新的分析方法与技术成果。
在本文中,我们介绍了多种专用AWS服务,您可以利用它们构建起智能湖仓架构中的五个核心逻辑层。我们还提供多种选项,介绍如何在正确的工作中使用正确的AWS服务以实现良好的灵活性与丰富的功能性。
关于更详尽的构建模式、演练以及构建智能湖仓架构各层的示例代码,请参阅以下资源:
- 使用Amazon Redshift的智能湖仓架构中的ETL与ELT设计模式: 第一部分 与 第二部分
- 使用Apache Hudi, AWS Glue, AWS DMS与Amazon Redshift为智能湖仓数据复制管道创建数据源
- 使用Amazon Redshift Concurrency Scaling与Spectrum管理并控制成本
- 运用Apache Spark与Amazon Machine Learning助力Amazon Redshift Analytics
- 使用Amazon Redshift Data API与Amazon Redshift集群进行交互
- 使用Amazon Redshift物化视图加速ELT与商务智能查询
- 使用Redshift联合查询建立精简化ETL与实时数据查询解决方案