- AWS Glue 教程
- AWS Glue - 首页
- AWS Glue - 简介
- AWS Glue - 开始使用
- AWS Glue - 数据目录
- AWS Glue - Amazon S3 集成
- AWS Glue - 爬虫
- AWS Glue - 性能优化
- AWS Glue - 成本优化
- AWS Glue 资源
- AWS Glue 快速指南
- AWS Glue - 资源
- AWS Glue - 讨论
AWS Glue 快速指南
AWS Glue 是亚马逊网络服务 (AWS) 提供的完全托管的无服务器数据集成云服务。它旨在帮助用户准备和转换数据,用于分析、机器学习和应用程序开发。使用 AWS Glue,您可以连接到 70 多个不同的数据源,并在中心化数据目录中管理您的数据。
作为无服务器数据集成服务,AWS Glue 自动执行与 ETL(提取、转换、加载)流程相关的许多工作。它简化了数据在各种来源和目标之间的提取、清理、丰富和移动。
AWS Glue 还非常容易与其他 AWS 服务集成,例如 Amazon S3、RDS、Redshift 和 Athena。此功能使其成为希望构建数据湖或数据仓库的组织的理想选择。
AWS Glue 的关键组件
AWS Glue 的关键组件如下所述:
1. Glue 数据目录
Glue 数据目录是一个中央存储库,用于存储有关您的数据元数据信息。它会自动扫描和组织数据,以便用户可以轻松地搜索、查询和管理数据集。它还可以很好地与 AWS 工具(如 Redshift 和 Athena)连接,允许用户平滑地访问数据。
2. 爬虫
我们在 AWS Glue 中定义的 ETL 作业使用数据目录表作为源和目标。这些数据目录表应始终保持更新。
爬虫在 AWS Glue 中的作用是自动发现新数据,识别其模式,并相应地更新数据目录。它们确保元数据始终是最新的。
3. Glue 作业
Glue 作业用于定义和管理 ETL 工作流。它们提取数据,使用 Apache Spark 转换数据,然后将其加载到目标系统中。您可以按需运行作业,也可以安排它们按指定的时间间隔运行。Glue 作业是数据转换过程的核心。
4. 触发器
借助触发器,用户可以根据计划或特定事件自动执行作业。触发器的使用有助于自动化重复性任务或构建复杂的数据管道。
5. 作业笔记本
AWS Glue 使用 Jupyter Notebook 提供 IDE(交互式开发环境)。您可以交互式地运行查询、分析数据和开发 Glue 作业。
6. Glue Studio
顾名思义,Glue Studio 是一个可视化界面,用于创建、运行和监控 ETL 工作流,无需编写代码。它对于非技术用户或不熟悉 Apache Spark 的用户很有用。
AWS Glue 的功能
我们可以将 AWS Glue 的重要功能分为以下三类:
1. 发现和组织数据
AWS Glue 使您可以以结构化的方式组织元数据,以便您可以轻松地在一个位置存储、搜索和管理所有数据。
AWS Glue 爬虫会自动发现数据并将其集成到您的数据目录中。它验证并控制对您的数据库和表的访问。
2. 转换、准备和清理用于分析的数据
您可以在 Glue Studio 中定义 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)。
- 最后,单击**创建**按钮,您的数据库即可使用。
步骤 2:创建 AWS Glue 爬虫
首先,转到**AWS Glue 控制台**并导航到**爬虫**部分。接下来,单击**创建爬虫**按钮。
现在,输入爬虫的名称(例如,my-data-crawler)。
您还需要定义**数据源**。这可以是 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 数据目录可以轻松地与 AWS 服务(如 Amazon Athena、Redshift 和 SageMaker)集成。此集成允许用户运行查询或构建 ML 模型,而无需手动处理数据。
如何使用 AWS Glue 数据目录?
使用 AWS Glue 数据目录非常简单。首先,您需要创建一个数据库,用于存储数据集的元数据。我们在上一节中讨论了创建数据库的方法。
拥有数据库后,您需要创建一个 AWS Glue 爬虫,它将自动扫描您的源。爬虫识别数据结构并使用表名、列和数据类型等元数据更新数据目录。然后,可以使用 Amazon Athena 等工具查询此元数据。
使用 Glue 数据目录管理元数据
您拥有可用于查询的元数据,但对于处理大量数据的组织而言,有效管理此元数据非常重要。在学习管理元数据的方法之前,了解此元数据非常重要。
了解元数据
元数据是关于数据的数据。它提供以下重要信息:
- **模式** - 它表示数据集的结构。它包括表、列和数据类型。
- 位置 −顾名思义,这是您的数据存储在AWS中的位置。它可以是Amazon S3存储桶或Amazon Redshift之类的数据库。
- 描述 − 它提供有关数据的其他信息。可能包括其用途以及数据来源。
管理元数据的方法
以下是一些您可以用来管理元数据的方法:
1. 手动编辑元数据
虽然AWS Crawlers的自动数据检测已经足够,但您也可以手动编辑数据。要手动编辑元数据,首先在数据目录中找到您的数据库和表。现在,您可以点击要编辑的特定表。您可以编辑其属性、列和数据类型。
2. 使用标签编辑元数据
标签有助于更有效地组织和管理元数据。您可以使用键值对标记数据库和表,以便轻松对其进行分类。
标签还可以增强元数据的可搜索性,从而更容易在大型集合中找到特定数据集。
Amazon S3与AWS Glue集成
Amazon S3(简单存储服务)是一种灵活可靠的存储服务,非常适合管理大型数据集。AWS Glue是一种提取、转换和加载 (ETL) 服务,当Amazon S3与之集成时,数据的管理和处理变得非常容易。
在Amazon S3中使用AWS Glue存储数据的优势
以下是将数据存储在Amazon S3中并使用AWS Glue的关键优势:
- 在S3中使用AWS Glue存储数据,使其可以轻松访问存储在S3存储桶中的数据。我们可以直接对S3数据运行ETL作业,并将其转换为有意义的格式。
- 借助Glue Crawlers,AWS Glue可以自动检测存储在S3存储桶中的数据的模式。它使我们能够更快、更高效地查询数据。
- 使用AWS Glue内置的Apache Spark环境,我们可以转换存储在Amazon S3存储桶中的数据。
如何在Amazon S3中使用AWS Glue存储和处理数据?
请按照以下步骤在S3存储桶中使用AWS Glue存储和处理数据:
步骤1:设置您的Amazon S3存储桶 − 在使用AWS Glue之前,必须将数据存储在Amazon S3存储桶中。您可以通过两种方式将数据集上传到S3存储桶:手动或通过文件传输之类的自动化流程。
步骤2:创建Glue Crawler − 将数据存储在S3存储桶中后,您可以设置Glue Crawler,它将扫描您的S3存储桶,提取元数据并将其保存到Glue数据目录中。
步骤3:定义和运行ETL作业 − 创建元数据后,您现在可以在AWS Glue中创建一个ETL作业来处理存储在S3存储桶中的数据。
步骤4:查询和分析数据 − 数据处理完成后,您可以使用AWS服务(如Amazon Athena)查询数据。您还可以将其加载到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 Crawler − 将分区数据放入S3后,创建并配置AWS Glue Crawler。Crawler将自动识别文件夹结构并将分区信息添加到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 # Load partitioned data from Glue Data Catalog dynamic_frame = glueContext.create_dynamic_frame.from_catalog(database="my_database", table_name="sales_data") # Filter data for a specific year and month filtered_frame = dynamic_frame.filter(f => f["year"] == "2023" and f["month"] == "09") # Continue with the ETL process -----------------
上面的脚本将根据年份和月份过滤数据。然后,它执行ETL流程中定义的转换或操作。最终输出将写入您的Amazon S3存储桶。
AWS Glue - 爬虫
我们在 AWS Glue 中定义的 ETL 作业使用数据目录表作为源和目标。这些数据目录表应始终保持更新。
Crawler在AWS Glue中的作用是自动发现新数据,识别其模式,并相应地更新数据目录。它们通过自动发现和编目数据来确保元数据始终是最新的。
Crawler如何自动化数据发现和编目?
AWS Glue Crawlers为我们提供了一种有效的方法来自动化数据发现和编目。通过扫描数据源、识别模式、生成元数据以及将其组织到Glue数据目录中,它们消除了手动数据管理的需要。这种自动化有助于企业确保其数据始终可用并随时准备进行分析。
让我们看看Crawler如何自动化数据发现和编目:
1. 数据格式识别
创建和配置AWS Crawlers后,它们首先会识别数据格式。它们足够智能,可以识别各种数据格式,例如JSON、CSV、Avro、Parquet和ORC。Crawler会检查定义的数据源中文件的格式和结构,以对数据类型、模式和表进行分类。
2. 生成元数据
识别数据格式后,Crawler会为每个表和数据集生成元数据。此元数据包括有关模式的信息,例如列名、数据类型以及表之间的关系。
3. 编目数据
生成元数据后,Crawler会通过将模式信息存储在Glue数据目录中来自动编目数据。数据目录将元数据组织到数据库和表中,其他AWS服务(如Athena、Redshift和SageMaker)可以访问这些数据库和表以进行分析和机器学习。
4. 自动调度
我们还可以将Crawler安排为定期自动运行。这确保了无需人工干预即可持续发现和编目新的或更新的数据。它允许企业保持其数据目录的最新状态并随时准备进行分析。
5. 数据转换
AWS Crawlers自动化数据发现和编目。Crawler生成的元数据对于设置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 Parquet或ORC。这些格式减少了I/O,因为它们只加载处理所需的列。
- 您可以使用Amazon S3多部分上传和并行处理来加快AWS服务之间的数据传输。
使用下推谓词
下推谓词有助于在ETL流程的早期过滤数据。这意味着,只处理相关的数据子集。当您处理大型数据集时,这很有用。
请按照以下步骤优化下推谓词:
- 您应该直接在数据源上应用过滤器。这将最大限度地减少下游处理的数据量。例如,您可以在将大型数据集加载到Glue作业之前,先过滤掉一些特定行。
- 您可以在ETL脚本中使用push_down_predicate参数。它只加载转换过程所需的数据。
优化AWS Glue中的转换
提高性能的关键之一是降低转换的复杂性。AWS Glue提供内置转换,但以下一些技术可以使ETL作业更高效。
- 尝试避免冗余转换,确保仅在必要时应用联接、过滤或聚合等操作。
- 当其中一个数据集较小时,您可以使用广播联接。此技术加快了联接操作的速度。
在AWS Glue中启用作业书签
AWS Glue作业书签旨在跟踪ETL作业中最后成功处理的数据。您可以使用作业书签来避免重新处理已处理的数据。这样可以节省时间和资源。
- 当您处理增量数据时,始终启用作业书签。
- 确保为ETL作业使用的Amazon S3或数据库中存储的数据集正确配置作业书签。
管理AWS Glue中的内存和资源分配
高效的资源管理确保最佳性能、成本效益并防止作业失败。AWS Glue提供各种方法来管理ETL作业的内存和资源分配。
选择正确的Worker类型
AWS Glue允许您根据工作负载需求选择三种不同的worker类型:标准型、G.1X和G.2X worker。每种worker类型都提供不同级别的内存和处理能力。
对于通用ETL作业,您应该使用标准型worker;而对于复杂的交易或处理大型数据集,您可以选择G.1X或G.2X worker。
调整DPU数量
AWS Glue作业使用数据处理单元 (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提供免费套餐,每月免费提供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成本管理器跟踪您的Glue使用情况。您还可以设置计费警报,以便在您的Glue成本超过某个限制时收到通知。