发布于: Oct 30, 2022

获取数据只是数据库系统所要面对的第一步,一个性能完备的数据系统主要在于他的实时数据处理能力,那么智能湖仓是如何优化这一过程的呢?这里我们将会详细介绍智能湖仓架构中的数据处理层。

智能湖仓架构中的处理层提供多种专用组件,能够支持各类数据处理用例。为了匹配智能湖仓内各数据集的独特结构(平面表、多层或者非结构化)及速度(批量或流式),您可以灵活选择不同的专用处理组件。各个组件都能够面向 Amazon S3Amazon Redshift(统称为智能湖仓存储)读写数据。

我们可以使用处理层组件构建数据处理作业,这些作业将使用以下接口对存储在数据仓库及数据湖内的数据进行读写:

  • Amazon Redshift SQL(配合 Redshift Spectrum)。
  • 运行在 Amazon EMR 上的 Apache Spark 作业。关于更多详细信息,请参阅: 
    • 关于 DataFrameReader  DataFrameWriter Spark 说明文档。
    • GitHub 上的用于 Apache Spark 的高效 Redshift 数据源——社区版 
  • 运行在 Amazon Glue 上的 Apache Spark 作业。关于更多详细信息,请参阅:
    • DynamicFrameReader
    • DynamicFrameWriter
    • 面向 Amazon Redshift 的往来数据迁移

您可以使用 Amazon Glue crawlersLake Formation API,将结果数据集中的元数据添加到 Lake Formation 中央目录内。

您也可以使用专用组件构建出能够实现以下功能的数据转换管道:

  • 使用 Amazon Redshift(配合 Redshift Spectrum)、基于 SQL ELT
  • 使用 Amazon GlueAmazon EMR 实现的大数据处理
  • 使用 Amazon Kinesis 实现的近实时流式数据处理。关于更多详细信息,请参阅:
    • 使用 Amazon Kinesis Analytics 在流式数据上写入 SQL——第一部分
    • 使用 Amazon Kinesis Analytics 在流式数据上写入 SQL——第二部分
    • 通过流式无服务器处理获取实时洞见
    • 使用 Apache Flink Amazon Kinesis Data Analytics 实现流式 ETL
  • 使用 Spark StreamingAmazon Glue 上实现近实时流式数据处理。关于更多详细信息,请参阅新增功能——使用 Amazon Glue 实现无服务器流式 ETL
  • 使用 Spark Streaming Amazon EMR 上实现近实时流式数据处理。关于更多详细信息,请参阅:
    • 优化 Spark Streaming,高效处理 Amazon Kinesis Streams
    • 使用 Spark Streaming 实现实时分析
    • 使用 SQLSpark Steraming 直接查询 Amazon Kinesis Streams
    • 使用 Apache Spark StreamingApache Kafka on Amazon Web Services 实现实时流处理

要在智能湖仓存储层中转换结构化数据,您可以使用您所熟悉的 SQL 语义构建起功能强大的 ELT 管道。这些 ELT 管道将使用 Amazon Redshift 中的大规模并发处理(MPP)功能以及 Redshift Spectrum 功能启动数千个瞬态节点,即时将处理容量扩展至 PB 级别。Amazon Redshift 上基于存储过程的这类ELT管道能够对以下对象进行转换:

  • Amazon DMS Amazon AppFlow 直接传递至 Amazon Redshift staging 表的平面结构化数据
  • 使用开源文件格式(例如 JSONAvroParquetORC 等)托管在数据湖内的数据

在数据丰富期间,这些管道还可以使用 SQL 语句将内部维度表与 S3 数据湖内托管的大型事实表(使用 Redshift Spectrum 层)连接起来。在最后一步中,数据处理管道可以将经过策划、丰富与建模的数据插入至 Amazon Redshift 内部表或存储在 Amazon S3 中的外部表内。

为了对智能湖仓存储层(Amazon S3 Amazon Redshift)上托管的大量半结构化、非结构化或高度结构化数据进行集成处理,您可以使用 Apache Spark 构建大数据处理作业,并在 Amazon Glue Amazon EMR 上加以运行。这些作业可以使用 Spark 的原生及其他开源连接器进行访问,并将 Amazon Redshift中存储的关系型数据同 Amazon S3 中存储的复杂平面或分层结构化数据结合起来。处理完成后,这些作业可以将结果数据集存储回 S3 数据湖、Amazon Redshift 数据仓库或者二者共同构成的智能湖仓存储层。

Amazon Glue 提供无服务器、按使用量计费的 ETL 功能,其 ETL 管道能够处理规模达数十 TB 的海量数据,且无需启动或管理任何服务器或集群。为了加快 ETL 开发,Amazon Glue 还能自动生成 ETL 代码并提供常用的数据结构与 ETL 转换(用于验证、清洗、转换及展平数据)。Amazon Glue 还提供内置功能,用于处理存储在 Amazon Redshift 以及 S3 数据湖内的数据。在同一作业之内,Amazon Glue 还可以加载并处理使用平面表格式存储的 Amazon Redshift 数据、以及其他使用常见开源格式(例如 CSVJSONParquet 以及 Avro)存储的 S3 数据湖托管数据集。Amazon Glue ETL 作业可通过公共 Lake Formation 目录(Amazon Glue crawlers 会爬取 Amazon S3 Amazon Redshift 以获取数据)访问这些数据,借此以统一方式引用 Amazon RedshiftAmazon S3 托管表。Amazon Glue ETL 还能够对分区数据执行增量处理。此外,Amazon Glue 也提供触发器与工作流功能,可用于构建包含作业依赖项、并发运行等多个步骤的端到端数据处理管道。

您可以自动扩展 EMR 集群,满足PB级别大数据处理管道的严苛资源需求。这些管道还可以使用不同的- Amazon Elastic Compute Cloud (Amazon EC2)竞价实例队列,进一步改善资源成本优化效果。关于实例选项的更多详细信息,请参阅支持的实例类型。

运行在 Amazon EMR 上的基于 Spark 数据处理管道能够实现以下功能:

  • Spark 内置的读取器  写入器 能够处理采用多种开源格式的数据湖托管数据集。
  • 开源 Spark-Amazon Redshift 连接器能够直接对 Amazon Redshift 数据仓库中的数据进行读取与写入。

要读取由数据湖托管的复杂结构化数据集 schemaAmazon EMR 上的 Spark ETL 作业可以接入 Lake Formation 目录。这是通过 Amazon Glue 兼容性配合 Amazon Web Services 身份与访问管理(IAM)策略共同实现,负责对指向 Amazon Glue 表以及底层 S3 对象的访问进行分别授权。同样,Spark 作业还可以使用 Spark-Amazon Redshift 连接器读取 Amazon Redshift 托管数据集的数据与 schema。您也可以使用 SparkApache Hudi 构建高效的增量数据处理管道 Amazon EMR

要执行多个现代分析用例,您需要以近实时方式执行以下操作:

  • 摄取大量高频或流式数据
  • 验证、清洗与丰富数据
  • 将数据放入智能湖仓存储以供消费

您可以使用以下方法构建起能够轻松扩展、并近实时处理大量数据的管道:

  • Amazon Kinesis Data Analytics for SQL/Flink
  • Amazon GlueAmazon EMR 上使用 Spark Streaming
  • Kinesis Data Firehose  Amazon Lambda 相集成

Kinesis Data AnalyticsAmazon GlueKinesis Data Firehose 可帮助您建立起近实时数据处理管道,且无需创建或管理任何计算基础设施。Kinesis Data FirehoseKinesis Data Analytics 管道能够弹性扩展以匹配源吞吐量,而基于 Amazon EMR Amazon Glue Spark Streaming 作业则可以根据指定的扩展参数、在几分钟内完成规模扩展。

基于 Kinesis Data Analytics for Flink/SQL 的流式管道通常会从 Amazon Kinesis Data Streams (位于我们智能湖仓架构的摄取层中)读取记录、对其进行转换,而后将处理完成的数据写入至 Kinesis Data FirehoseSpark Streaming 管道则通常从 Kinesis Data Streams(位于我们智能湖仓架构的摄取层中)读取记录、对其进行转换,而后将处理完成的数据写入至另一 Kinesis 数据流,且后者又接入 Kinesis Data Firehose 交付流。Firehose 交付流能够将处理后的数据交付至智能湖仓存储层内的 Amazon S3 Amazon Redshift。要构建起简单、不涉及状态转换的近实时管道,您可以将数据直接摄取至 Kinesis Data Firehose 中,并使用 Kinesis Data Firehose 调用的 Lambda 函数对传入记录进行微批处理。Kinesis Data Firehose 会将转换后的微批记录交付至智能湖仓存储层中的 Amazon S3Amazon Redshift

凭借着将数据交付至 Amazon S3Amazon Redshift 的能力, Kinesis Data Firehose 得以为处理层中的近实时 ETL 管道提供统一的智能湖仓存储写入器接口。在 Amazon S3 上, Kinesis Data Firehose 可以将数据存储在有效的 Parquet ORC 文件中,您可以灵活使用 ZIPGZIPSnappy 等开源编解码器对这些文件进行压缩。

 

相关文章