0Pricing
AWS Solutions Architect · 课时

AWS Glue:ETL 与数据目录

使用 AWS Glue 运行无服务器 ETL 作业,在 Glue Data Catalogue 中注册表结构,并自动爬取新数据

AWS Glue:ETL 与数据目录 是 CoddyKit 上的免费 AWS Solutions Architect 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AWS Solutions Architect 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AWS Solutions Architect 课程共包含 4 节课。

什么是 AWS Glue?

AWS Glue 是一种完全托管的无服务器 ETL(提取、转换、加载)服务。您无需预置或管理任何服务器——作业运行时,Glue 会自动分配 Spark 或 Python 工作进程。Glue 由两个主要组件组成:用于数据转换作业的ETL 引擎,以及用于存储数据源和目标相关元数据的Data Catalogue。

Glue Data Catalogue 详解

Glue Data Catalogue 是一个与 Apache Hive Metastore 兼容的集中式元数据存储库。它存储数据库、表、列定义、数据类型和分区信息。Athena、Redshift Spectrum 和 EMR 等服务都使用同一个 Data Catalogue,使其成为数据湖中数据内容及其在 S3 中存放位置的唯一事实来源。

# List databases in the Glue Data Catalogue
aws glue get-databases --query 'DatabaseList[*].Name'

# List tables in a database
aws glue get-tables --database-name my_db --query 'TableList[*].Name'

Glue Crawler:自动发现架构

Glue Crawler 会连接到数据存储(S3、JDBC、DynamoDB),对数据进行抽样,并自动推断架构和分区结构。随后,它会在 Data Catalogue 中写入或更新表定义。Crawler 可以按计划运行,也可以按需触发。它们支持增量爬取,因此后续运行时只会处理新的分区。

# Create and start a Glue Crawler via CLI
aws glue create-crawler \
  --name sales-crawler \
  --role arn:aws:iam::123456789012:role/GlueRole \
  --database-name my_db \
  --targets '{"S3Targets": [{"Path": "s3://my-data-lake-123/landing/sales/"}]}'

aws glue start-crawler --name sales-crawler

编写 Glue ETL 作业

Glue ETL 作业是一个 PySpark 或 Scala Spark 脚本,它从源读取数据,使用 DynamicFrame API 应用转换,并将结果写入目标。DynamicFrames 在 Spark DataFrames 的基础上提供了灵活的架构:能够自动处理不一致的数据类型和嵌套 JSON。您可以通过 Glue Studio 可视化编辑器生成作业脚本模板。

# Minimal Glue PySpark ETL job
from awsglue.context import GlueContext
from awsglue.transforms import *
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)

# Read from Data Catalogue table
source = glueContext.create_dynamic_frame.from_catalog(
    database='my_db', table_name='raw_sales')

# Drop null order_id rows
cleaned = Filter.apply(frame=source, f=lambda r: r['order_id'] is not None)

# Write Parquet to curated zone
glueContext.write_dynamic_frame.from_options(
    frame=cleaned,
    connection_type='s3',
    connection_options={'path': 's3://my-data-lake-123/curated/sales/'},
    format='parquet')

Glue 作业工作进程与 DPU

Glue 使用数据处理单元(DPU)分配容量。一个 DPU 等于 4 个 vCPU 和 16 GB 内存。您可以选择工作进程类型(G.1X、G.2X 或用于弹性/流式 Spark 处理的 G.025X)以及工作进程数量。对于小型作业,请使用 G.025X Python Shell 作业类型;它只使用四分之一个 DPU,非常适合简单转换且成本效益高。

# Create a Glue job with G.1X workers
aws glue create-job \
  --name clean-sales \
  --role arn:aws:iam::123456789012:role/GlueRole \
  --command '{"Name": "glueetl", "ScriptLocation": "s3://scripts/clean_sales.py", "PythonVersion": "3"}' \
  --worker-type G.1X \
  --number-of-workers 5 \
  --glue-version '4.0'

Glue 工作流与触发器

Glue Workflow 会将 Crawler 和作业串联成依赖关系图。Crawler 发现新数据后,完成时触发一个作业,随后再触发另一个作业,依此类推。Triggers 可以是计划型(cron)、事件型(按需)或条件型(作业成功或失败时触发)。工作流为您的 ETL 流程提供可视化 DAG,无需单独的编排服务。

# Create a schedule trigger that starts a job every night at 2 AM UTC
aws glue create-trigger \
  --name nightly-clean \
  --type SCHEDULED \
  --schedule 'cron(0 2 * * ? *)' \
  --actions '[{"JobName": "clean-sales"}]' \
  --start-on-creation

Glue Studio:可视化 ETL 构建器

Glue Studio 提供拖放式界面,让您无需手动编写 PySpark 代码即可通过图形方式设计 ETL 作业。您可以将源节点(S3、Catalogue 表、JDBC)连接到转换节点(过滤、连接、聚合、自定义 Python),再连接到目标节点。Glue Studio 会自动生成 Spark 脚本,还提供作业运行控制面板,用于监控执行状态和数据质量指标。

Glue Data Quality

AWS Glue Data Quality(DQDL — Data Quality Definition Language)允许您编写规则,在数据流经 ETL 作业时对其进行验证。规则可以检查空值率、取值范围、引用完整性和唯一性。如果数据未通过质量规则,Glue 可以暂停作业,或将不合格记录转至 S3 中的隔离路径进行人工审查,而不是让损坏的数据悄然进入 Curated 分区。

# DQDL rule example for Glue Data Quality
# Reject rows where order_total is negative or null
Rules = [
  IsComplete 'order_total',
  ColumnValues 'order_total' >= 0
]

Glue 与其他 ETL 选项的比较

对于 SAA-C03 考试,您需要了解何时推荐 Glue 而不是其他方案。需要无服务器 Spark ETL 和 Data Catalogue 集成时,请使用 Glue。需要编排较旧的数据移动任务(主要是遗留任务)时,请使用 AWS Data Pipeline。需要自定义 Hadoop/Spark 集群配置或运行长时间作业时,请使用 Amazon EMR。需要对小型负载执行轻量级、事件驱动的微型转换时,请使用 Lambda。

JDBC 与非 S3 数据源

Glue 可以通过 JDBC connections 连接关系数据库,包括 RDS、Aurora、Redshift,或通过 Glue VPC Connection 连接本地数据库。您需要使用 JDBC URL、来自 Secrets Manager 的凭证以及 VPC 安全组来定义连接。随后,Glue 会使用放置在 VPC 子网内的专用网络接口访问私有数据库端点,而无需经过公共互联网。

# Create a Glue JDBC connection to RDS Aurora
aws glue create-connection \
  --connection-input '{
    "Name": "aurora-prod",
    "ConnectionType": "JDBC",
    "ConnectionProperties": {
      "JDBC_CONNECTION_URL": "jdbc:mysql://aurora-cluster.cluster-xyz.us-east-1.rds.amazonaws.com:3306/sales",
      "SECRET_ID": "arn:aws:secretsmanager:us-east-1:123:secret:rds-creds"
    },
    "PhysicalConnectionRequirements": {
      "SubnetId": "subnet-abc123",
      "SecurityGroupIdList": ["sg-xyz456"],
      "AvailabilityZone": "us-east-1a"
    }
  }'

书签:增量处理

默认情况下,Glue 作业每次运行都会重新处理所有记录。Glue Job Bookmarks 会跟踪已经处理过的输入文件,因此后续运行时只会获取新数据。对于每天都会有新文件写入同一前缀的只追加型 S3 数据源,书签至关重要。请在作业参数中使用 --job-bookmark-option job-bookmark-enable 启用书签。

# Start Glue job with bookmark enabled
aws glue start-job-run \
  --job-name clean-sales \
  --arguments '{"--job-bookmark-option": "job-bookmark-enable"}'

快速检查

测试您对本课 AWS Solutions Architect (SAA-C03) 概念的理解。

课程回顾

本课您学到了:AWS Glue 通过 PySpark 和 DynamicFrame API 提供无服务器 ETL,Glue 爬虫会自动发现架构并填充 Data Catalogue,以及 Glue 书签支持增量处理新的 S3 数据。接下来我们将探索 Amazon Athena,直接在 S3 上执行无服务器 SQL 查询。

常见问题解答

「AWS Glue:ETL 与数据目录」课时是免费的吗?

是的 — 「AWS Glue:ETL 与数据目录」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AWS Solutions Architect 课程的其余内容,请升级到 CoddyKit PRO。 AWS Solutions Architect 课程共包含 4 节课。

「AWS Glue:ETL 与数据目录」这节课中我会学到什么?

使用 AWS Glue 运行无服务器 ETL 作业,在 Glue Data Catalogue 中注册表结构,并自动爬取新数据 你通过在浏览器中直接运行的动手代码来练习 AWS Solutions Architect,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 AWS Solutions Architect 需要有经验吗?

无需任何先前经验。CoddyKit 上的 AWS Solutions Architect 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「AWS Glue:ETL 与数据目录」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 AWS Solutions Architect 课中编写并运行代码吗?

能。每节 AWS Solutions Architect 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 在 S3 上构建数据湖
  2. AWS Glue:ETL 与数据目录
  3. Amazon Athena:S3 上的无服务器 SQL
  4. Kinesis Streams、Firehose 与实时分析
← 返回 AWS Solutions Architect