AWS Glue - 快速指南

AWS Glue 是 Amazon Web Services (AWS) 提供的完全托管的无服务器数据集成云服务。它旨在帮助用户准备和转换数据以进行分析、机器学习和应用程序开发。借助 AWS Glue,您可以连接 70 多个不同的数据源并在集中式数据目录中管理数据。

作为无服务器数据集成服务,AWS Glue 可自动执行与 ETL(提取、转换、加载)流程相关的大部分工作。它简化了各种来源和目的地之间的数据提取、清理、丰富和移动。

AWS Glue 还可以非常轻松地与其他 AWS 服务(如 Amazon S3、RDS、Redshift 和 Athena)集成。此功能使其成为想要构建数据湖或数据仓库的组织的完美选择。

AWS Glue 的关键组件

AWS Glue 的关键组件如下所述 −

1. Glue 数据目录

Glue 数据目录是一个中央存储库,用于存储有关数据的元数据信息。它会自动扫描和组织数据,以便用户可以轻松搜索、查询和管理数据集。它还可以与 Redshift 和 Athena 等 AWS 工具很好地连接,使用户能够顺利访问数据。

2. 爬虫

我们在 AWS Glue 中定义的 ETL 作业使用数据目录表作为源和目标。这些数据目录表应始终更新。

AWS Glue 中爬虫的作用是自动发现新数据、识别其模式并相应地更新数据目录。它们确保元数据始终是最新的。

3. Glue 作业

Glue 作业用于定义和管理 ETL 工作流。它们提取数据,使用 Apache Spark 对其进行转换,并将其加载到目标系统中。您可以按需运行作业,也可以安排它们以指定的间隔运行。Glue 作业是数据转换过程的核心。

4. 触发器

借助触发器,用户可以根据时间表或特定事件自动执行作业。使用触发器有助于自动执行重复任务或构建复杂的数据管道。

5. 作业笔记本

AWS Glue 使用 Jupyter Notebooks 提供 IDE(交互式开发环境)。您可以以交互方式运行查询、分析数据和开发 Glue 作业。

6. Glue Studio

顾名思义,Glue Studio 是一个可视化界面,用于创建、运行和监控 ETL 工作流,无需编写代码。它对于非技术用户或不熟悉 Apache Spark 的用户很有用。

AWS Glue 的功能

我们可以将 AWS Glue 的重要功能分为以下三类 −

1. 发现和组织数据

AWS Glue 使您能够以结构化的方式组织元数据,以便您可以轻松地在一个地方存储、搜索和管理所有数据。

AWS Glue 爬虫会自动发现数据并将其集成到您的数据目录中。它会验证并控制对数据库和表的访问。

2. 转换、准备和清理数据以进行分析

您可以在 Glue 工作室中定义 ETL 流程,它会自动为该流程生成代码。AWS Glue 的 作业笔记本 提供需要最少设置的无服务器笔记本。使用这些笔记本,您可以快速开始处理项目。

AWS Glue 具有 敏感数据检测 功能,可让您定义、识别和处理数据湖和管道中的敏感数据。 AWS Glue 允许用户以交互方式探索 并准备数据

3. 构建和监控数据管道

您可以使用爬虫或带有基于事件的触发器的 AWS Glue 作业自动执行作业。它允许您使用您选择的引擎 Apache Spark 或 Ray 来运行作业。

您可以组织和管理不同爬虫、作业和触发器的 ETL 流程和集成活动。

AWS Glue - 入门

按照下面给出的步骤为您的第一个作业设置 AWS Glue −

步骤 1:先决条件

您必须拥有 AWS 账户才能使用AWS Glue。您应该拥有 IAM 角色。它允许 AWS Glue 访问 Amazon S3、RDS 或任何其他数据源中的数据。

此外,您还应将数据存储在 Amazon S3、RDS 或其他受支持的数据库中。

步骤 2:设置 AWS Glue 数据目录

首先,在 Glue 数据目录中创建一个数据库。接下来,您需要设置一个爬虫程序来扫描和分类您的数据源(例如 Amazon S3)。

爬虫程序的作用是自动检测数据类型并在您的 Glue 数据目录中创建元数据表。

步骤 3:在 AWS Glue 中创建新作业

将数据编入目录后,转到 AWS Glue 控制台并选择作业。然后,点击添加作业创建一个新的 ETL 作业。

接下来,您需要配置作业。使用以下选项进行配置 −

  • 命名您的作业。
  • 选择 Glue 将使用的 IAM 角色
  • 选择您的 ETL 脚本源(自动生成或自定义编写)。
  • 定义数据源(Amazon S3、RDS 等)和目标

这是可选的,但最好将转换过滤器添加到您的作业脚本中。

步骤 4:运行您的 Glue 作业

完成设置后,查看作业设置并单击运行作业。 AWS Glue 将根据定义的 ETL 脚本开始处理数据。

现在,您可以在 AWS Glue 控制台 的"作业"部分下监控作业的进度。

步骤 5:验证输出

要验证输出,请在作业完成后检查目标位置(例如 Amazon S3)。传输的数据应成功加载到那里。

创建 AWS Glue 爬虫程序和数据库

AWS Glue 的关键组件之一是 爬虫程序,它会自动发现新数据、识别其架构并相应地更新数据目录。以下是为您的数据创建 AWS Glue 爬虫程序和数据库的步骤。

步骤 1:设置您的 AWS Glue 数据库

在 AWS Glue 中创建爬虫程序之前,您需要设置一个数据库。此数据库将充当数据源元数据的容器。

按照以下步骤设置数据库 −

  • 首先,登录 AWS Glue 控制台。
  • 在左侧导航窗格中,单击数据目录部分下的数据库
  • 选择添加数据库并输入数据库的名称(例如,my-data-catalog)。
  • 最后,单击创建按钮,您的数据库即可使用。
设置您的 AWS Glue 数据库

第 2 步:创建 AWS Glue 爬虫

首先,转到 AWS Glue 控制台并导航到爬虫部分。接下来,点击创建爬虫按钮。

创建 AWS Glue 爬虫

现在,输入爬虫的名称(例如,my-data-crawler)。

创建 AWS Glue 爬虫

您还需要定义数据源。这可以是 Amazon S3、DynamoDB 或存储数据的任何受支持的数据源。

接下来,在配置安全设置部分下,设置允许 AWS Glue 访问您的数据的IAM 角色。然后,指定您之前创建的目标数据库。这是爬虫程序存储其发现的元数据的位置。

您可以安排爬虫程序按需或定期运行,以使元数据保持最新。最后,检查您的设置并单击完成

步骤 3:运行爬虫程序

设置爬虫程序后,首先返回 Glue 控制台中的"爬虫程序"部分并选择您新创建的爬虫程序。

接下来,单击运行爬虫程序以启动该过程。爬虫程序完成后,它将使用其发现的每个数据集的表和元数据填充 Glue 数据目录。

AWS Glue - 数据目录

AWS Glue 数据目录是一个存储有关数据的元数据信息的中央存储库。简单来说,数据目录就像一个数据字典,它保存了数据结构、数据位置以及如何使用查询访问数据等详细信息。这些元数据信息对于管理和组织大量数据非常重要。

您可以将数据存储在 Amazon S3、Redshift 或 AWS 中的任何其他位置。AWS Glue 数据目录的主要作用是集中管理数据并使其可供分析。

数据目录的主要功能

下面列出了 AWS Glue 数据目录的一些主要功能 −

  • 自动数据检测 − AWS Glue 爬虫程序会扫描您的数据源、识别架构并自动对元数据进行分类。此数据存储在 AWS Glue 数据目录中。
  • 集中元数据管理 − 数据目录的主要功能之一是它将所有元数据集中在一个地方。这就是用户无需手动定义数据的原因。它还使管理大型数据环境变得更加容易。
  • 与 AWS 服务集成 − AWS Glue 数据目录可以轻松与 Amazon Athena、Redshift 和 SageMaker 等 AWS 服务集成。此集成允许用户运行查询或构建 ML 模型,而无需手动处理数据。

如何使用 AWS Glue 数据目录?

使用 AWS Glue 数据目录非常简单。首先,您需要创建一个数据库来存储数据集的元数据。我们在上一节中讨论了创建数据库的方法。

有了数据库后,您需要创建一个 AWS Glue 爬虫程序,它将自动扫描您的源。爬虫程序识别数据结构并使用元数据(如表名、列和数据类型)更新数据目录。然后可以使用 Amazon Athena 等工具查询此元数据。

使用 Glue 数据目录管理元数据

您有可用于查询的元数据,但有效管理这些元数据对于处理大量数据的组织来说非常重要。在学习管理元数据的方法之前,了解这些元数据很重要。

了解元数据

元数据是关于数据的数据。它提供以下重要信息,例如 −

  • Schema − 它表示数据集的结构。它包括表、列和数据类型。
  • 位置 − 顾名思义,它是存储数据的 AWS 位置。它可以是 Amazon S3 存储桶或 Amazon Redshift 等数据库。
  • 描述 − 它提供了一些有关数据的附加信息。它可能包括其用途和来源。

管理元数据的方法

以下是一些可借助其管理元数据的方法 −

1. 手动编辑元数据

虽然 AWS Crawlers 自动数据检测就足够了,但您也可以手动编辑数据。要手动编辑元数据,首先找到数据目录中列出的数据库和表。现在,您可以单击要编辑的特定表。您可以编辑其属性、列和数据类型。

2. 使用标签编辑元数据

标签有助于更有效地组织和管理元数据。您可以使用键值对标记数据库和表,以便轻松对其进行分类。

标签还增强了元数据的可搜索性,从而进一步简化了在大型集合中查找特定数据集的过程。

Amazon S3 与 AWS Glue 集成

Amazon S3(简单存储服务)是一种灵活可靠的存储,非常适合管理大型数据集。AWS Glue 是一种提取、转换和加载 (ETL) 服务,当 Amazon S3 与其集成时,数据的管理和处理变得非常容易。

使用 AWS Glue 将数据存储在 Amazon S3 中的好处

以下列出了使用 AWS Glue 将数据存储在 Amazon S3 中的主要好处 −

  • 使用 AWS Glue 将数据存储在 S3 中,使其能够轻松访问存储在 S3 存储桶中的数据。我们可以直接在 S3 数据上运行 ETL 作业并将其转换为有意义的格式。
  • 借助 Glue Crawlers,AWS Glue 可以自动检测存储在 S3 存储桶中的数据的模式。它使我们能够更快、更高效地查询数据。
  • 使用 AWS Glue 内置的 Apache Spark 环境,我们可以转换存储在 Amazon S3 存储桶中的数据。

如何使用 AWS Glue 在 Amazon S3 中存储和处理数据?

使用下面给出的步骤使用 AWS Glue 在 S3 存储桶中存储和处理数据 −

步骤 1:设置您的 Amazon S3 存储桶 − 在使用 AWS Glue 之前,您必须将数据存储在 Amazon S3 存储桶中。您可以通过两种方式将数据集上传到 S3 存储桶中,手动或通过文件传输等自动化流程。

步骤 2:创建 Glue 爬虫 − 现在,将数据放入 S3 存储桶后,您可以设置 Glue 爬虫,它将扫描您的 S3 存储桶、提取元数据并将其保存在 Glue 数据目录中。

步骤 3:定义并运行 ETL 作业 − 创建元数据后,您现在可以在 AWS Glue 中创建 ETL 作业来处理存储在 S3 存储桶中的数据。

步骤 4:查询和分析数据 − 处理完数据后,您可以使用 Amazon Athena 等 AWS 服务查询数据。您还可以将其加载到 Amazon Redshift 等数据仓库中,以进行进一步分析。

使用 Amazon S3 管理 AWS Glue 作业中的分区

使用 Amazon S3 时,管理 AWS Glue 中的分区对于优化性能和降低处理成本非常重要。

分区,顾名思义,根据日期、区域或产品等特定键将数据集划分为更小但更易于管理的部分。换句话说,分区是一种将大型数据集组织成更小的逻辑段的方法。

例如,

s3://your-bucket-name/data/year=2023/month=09/day=27/

在此示例中,数据按年、月、日进行分区。

在 AWS Glue 中设置分区

按照下面给出的步骤在 AWS Glue 中设置分区 −

步骤 1:在 Amazon S3 中对数据进行分区 − 使用基于分区键(例如年、月、日)的目录结构在 Amazon S3 中组织数据。例如,s3://my-bucket/sales_data/year=2023/month=09/day=27/。

步骤 2:配置 AWS Glue 爬虫程序 − 在 S3 中拥有分区数据后,创建并配置 AWS Glue 爬虫程序。爬虫程序将自动识别文件夹结构并将分区信息添加到 Glue 数据目录。

步骤 3:创建或修改 Glue 作业 − 您可以创建或修改 Glue ETL 作业。在这两种情况下,都引用 Glue 数据目录中的分区数据。AWS Glue 将使用此信息仅处理必要的分区。

使用 DynamicFrames 管理分区

为了轻松管理分区数据,AWS Glue 提供了 DynamicFrames。您可以使用 from_catalog 函数加载分区数据,并使用 filter 函数处理特定分区。让我们看下面的一个例子 −

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session

# 从 Glue 数据目录加载分区数据
dynamic_frame = glueContext.create_dynamic_frame.from_catalog(database="my_database", table_name="sales_data")

# 筛选特定年份和月份的数据
filtered_frame = dynamic_frame.filter(f => f["year"] == "2023" and f["month"] == "09")

# 继续 ETL 流程
-----------------

上述脚本将根据年份和月份筛选数据。然后,它会执行 ETL 流程中定义的转换或操作。最终输出将写入您的 Amazon S3 存储桶。

AWS Glue - 爬虫

我们在 AWS Glue 中定义的 ETL 作业使用数据目录表作为源和目标。这些数据目录表应始终更新。

AWS Glue 中爬虫的作用是自动发现新数据、识别其模式并相应地更新数据目录。它们通过自动发现和编目数据来确保元数据始终是最新的。

爬虫如何自动发现和编目数据?

AWS Glue 爬虫为我们提供了一种自动发现和编目的有效方法。通过扫描数据源、识别模式、生成元数据并将其组织在 Glue 数据目录中,它们消除了手动数据管理的需要。这种自动化有助于企业确保其数据始终可用且最新以供分析。

让我们看看爬虫如何自动发现和编目 −

1. 数据格式识别

创建和配置 AWS 爬虫后,它们首先识别数据格式。它们足够智能,可以识别各种数据格式,例如 JSON、CSV、Avro、Parquet 和 ORC。爬虫程序会检查定义数据源中文件的格式和结构,以对数据类型、模式和表进行分类。

2. 生成元数据

识别数据格式后,爬虫程序会为每个表和数据集生成元数据。此元数据包括有关模式的信息,例如列名、数据类型和表之间的关系。

3. 对数据进行分类

生成元数据后,爬虫程序会通过将模式信息存储在 Glue 数据目录中来自动对数据进行分类。数据目录将元数据组织成数据库和表,其他 AWS 服务(例如 Athena、Redshift 和 SageMaker)可以访问这些数据库和表以进行分析和机器学习。

4.自动调度

我们还可以安排爬虫程序定期自动运行。这可确保无需人工干预即可持续发现和编目新数据或更新数据。它允许企业保持其数据目录最新并随时可供分析。

5. 数据转换

AWS 爬虫程序可自动进行数据发现和编目。爬虫程序生成的元数据对于设置 AWS Glue 作业以转换数据非常重要。编目后,可以使用 Glue 的 ETL 功能清理、丰富和转换数据。

AWS Glue - 性能优化

为了提高效率并降低数据处理工作流的成本,您必须优化 AWS Glue 提取、转换和加载 (ETL) 作业。

在本章中,我们重点介绍了一些优化 AWS Glue ETL 作业的最佳实践。

优化 AWS Glue 中的数据分区

数据分区是加快查询时间和减少 ETL 作业总体处理时间的重要因素。以下是优化数据分区的最佳实践 −

  • 您可以使用逻辑文件夹结构(例如基于日期的分区(例如,/year=2024/month=09/day=26/))在 Amazon S3 中组织数据。
  • 您可以在 AWS Glue 中使用动态框架来自动检测分区并仅加载相关数据。它将提高您的作业性能。
  • 您应该避免创建太多小分区。这会增加处理成本。

优化 AWS Glue 中的 I/O 操作

输入/输出操作也在 ETL 作业的性能中发挥着重要作用。让我们看看如何优化 I/O 操作 −

  • 您应该将数据转换为优化的列格式,如 Apache ParquetORC。这些格式减少了 I/O,因为它们只加载处理所需的相关列。
  • 您可以使用 Amazon S3 分段上传并行处理 来加快 AWS 服务之间的数据传输。

使用下推谓词

下推谓词有助于在 ETL 过程的早期过滤数据。这意味着,只处理相关的数据子集。当您处理大型数据集时,它很有用。

按照下面给出的步骤优化下推谓词 −

  • 您应该直接在数据源上应用过滤器。它将最大限度地减少下游处理的数据量。例如,您可以在将大型数据集加载到 Glue 作业之前过滤其中的一些特定行。
  • 您可以在 ETL 脚本中使用 push_down_predicate 参数。它只加载转换过程所需的数据。

优化 AWS Glue 中的转换

提高性能的关键之一是降低转换的复杂性。 AWS Glue 提供内置转换,但下面给出的一些技术可以使 ETL 作业更高效。

  • 尝试避免冗余转换,确保仅在必要时应用连接、过滤或聚合等操作。
  • 当其中一个数据集较小时,您可以使用广播连接。此技术可加快连接操作。

在 AWS Glue 中启用作业书签

AWS Glue 作业书签旨在跟踪 ETL 作业中最后成功处理的数据。您可以使用作业书签避免重新处理已经处理的数据。这样可以节省时间和资源。

  • 处理增量数据时,始终启用作业书签。
  • 确保为存储在 Amazon S3 中的数据集或 ETL 作业使用的数据库正确配置了作业书签。

在 AWS Glue 中管理内存和资源分配

高效的资源管理可确保最佳性能、成本效益并防止作业失败。AWS Glue 提供多种方法来管理 ETL 作业的内存和资源分配。

选择正确的工作器类型

AWS Glue 允许您根据工作负载需求从三种不同的工作器类型中进行选择:标准、G.1XG.2X 工作器。每种工作器类型都提供不同级别的内存和处理能力。

对于通用 ETL 作业,您应该使用 标准工作器;而对于复杂交易或处理大型数据集,您可以选择 G.1XG.2X 个工作器

调整 DPU 数量

AWS Glue 作业使用数据处理单元 (DPU) 来提供计算能力。为了显著提高性能,您应该分配正确数量的 DPU。您可以先分配最小数量的 DPU,然后如果您的作业需要更多资源,则可以增加 DPU 数量。

监控和调整内存使用情况

AWS Glue 通过 AWS CloudWatch 指标提供内置内存监控。您可以实时监控内存消耗情况,并根据需要调整作业参数。

优化作业并行性

AWS Glue 可以有效地将作业分配到多个节点上。此功能可确保作业运行得更快,从而显著提高性能。

AWS Glue - 成本优化

AWS Glue 定价基于按需付费模式,这意味着您只需为使用的资源付费。AWS Glue 费用分为多个部分。费用根据您使用服务的方式而有所不同。

下面列出了 AWS Glue 定价中的一些关键因素

数据处理单元 (DPU)

AWS Glue 中的数据处理单元 (DPU)是 CPU、内存和网络资源的组合。根据您在 ETL 作业执行期间使用的 DPU 数量向您收费。

运行 Glue ETL 作业的费用按秒计算,最短计费时间为 1 分钟。

AWS Glue 爬虫程序

爬虫程序会自动扫描您的数据以提取元数据并对 Glue 数据进行分类。Glue 爬虫程序按 DPU 小时计费,最短计费时间为 10 分钟。

AWS Glue 数据目录

Glue 数据目录根据目录中存储的对象(例如数据库、表和分区)数量计费。 AWS 为 Glue 数据目录提供每月 100 万个存储对象和 100 万个请求的免费套餐。

开发终端节点

开发终端节点允许您以交互方式创建和测试 ETL 脚本。其定价基于为开发终端节点分配的 DPU。

降低 AWS Glue 成本的技巧

AWS Glue 为用户提供了管理和处理数据的强大工具,但如果管理不当,成本可能会增加。

在本节中,我们重点介绍了一些降低 AWS Glue 成本的策略 −

优化数据处理单元 (DPU)

配置 AWS Glue 作业时,请尝试仅分配所需数量的 DPU。这是因为使用比必要更多的 DPU 会增加您的成本。

您应该使用 AWS CloudWatch 监控 Glue 作业的资源使用情况。要管理成本,您可以根据实际内存和 CPU 消耗调整 DPU。

最小化爬虫程序运行

您可以将爬虫程序安排为仅在需要发现或编目新数据时运行,而不是连续运行它们。

您可以将爬虫程序限制在特定分区或文件夹中,而不是在整个数据集上运行。这将减少处理时间和成本。

明智地使用 Glue 数据目录

您可以将存储的对象数量保持在 100 万以下,从而仅使用 Glue 数据目录的免费套餐。

您应该定期检查 Glue 数据目录并删除过时或未使用的表和分区,以避免不必要的费用。

使用免费套餐进行开发端点服务

如前所述,开发端点按小时计费。因此,请尝试在不使用时终止它们。

优化 ETL 作业

您可以使用下推谓词在源头过滤数据,以减少 Glue 作业处理的数据量。

您应该使用数据分区策略来优化查询性能。

监控和分析成本

您应该使用 AWS Cost Explorer 来跟踪您的 Glue 使用情况。您还可以设置 账单警报,以便在您的 Glue 成本超过一定限制时通知您。