AWS Glue

无服务器可扩展的 ETL 服务,统一提供数据目录元数据管理和基于 Apache Spark 的作业执行基础设施

概述

AWS Glue 是一项以无服务器方式执行数据抽取、转换、加载 (ETL) 的全托管服务。Glue Data Catalog 统一管理数据湖和数据仓库的元数据,供 Athena、Redshift Spectrum、EMR 等查询引擎作为通用模式定义引用。Crawler 自动扫描数据源推断并注册模式,无需手动定义表。作业执行基础设施提供 Apache Spark 和 Python Shell 两种类型,覆盖从大规模分布式处理到轻量脚本执行的广泛工作负载。

Data Catalog 与 Crawler 改变的元数据管理

Glue 的核心是 Data Catalog。将 S3 上的 Parquet 文件、RDS 表、Redshift 模式等分散数据源的元数据集中到一处,以 Hive Metastore 兼容接口公开。在 Athena 中编写查询时,FROM 子句指定的表定义实质上就是 Data Catalog 的条目。Crawler 定期扫描数据源,自动推断列名、数据类型、分区结构并注册到 Catalog。但推断精度并非万能,存在 CSV 首行被误判为数据而非标题、数值与字符串混合列类型不稳定等情况。实务中的惯例是 Crawler 首次运行后目视确认推断结果,必要时手动修正类型。自定义 Classifier 可支持独有格式文件。Azure 对应服务 Azure Data Factory 也具备元数据管理功能,但 Glue Data Catalog 可被 Athena 和 Redshift Spectrum 直接引用的高度集成是 AWS 独有优势。

Spark 作业与 Python Shell - DPU 设计要点

Glue 作业有基于 Apache Spark 的 ETL 作业和单节点运行的 Python Shell 作业两种。Spark 作业适用于数百 GB 到 TB 级数据的分布式处理,通过 DPU (Data Processing Unit) 分配数控制集群规模。1 DPU 相当于 4 vCPU + 16 GB 内存,Standard Worker 最少 2 DPU 起步。增加 DPU 可加速处理,但计费为 DPU 数 × 执行时间,过度分配直接导致成本浪费。实务中高效做法是先以 2 DPU 执行,确认 CloudWatch 指标的 Executor 内存使用率和 Shuffle Spill 后逐步扩容。Python Shell 作业以 1 DPU 或 0.0625 DPU 运行,适用于 API 调用或轻量文件转换等不需要 Spark 开销的处理。ETL 设计相关书籍 (Amazon) 系统解析了根据处理规模选择作业类型的方法。

Job Bookmark 与数据管道的幂等性

ETL 管道中最棘手的问题之一是「重复处理相同数据」。Glue 的 Job Bookmark 通过记录上次作业执行处理到哪里来解决此问题,下次执行时仅处理未处理部分。S3 源记录文件路径和时间戳,JDBC 源记录主键最大值,实现增量处理。但 Job Bookmark 仅在数据追加 (append) 时有效。现有文件覆盖更新或分区级别全量替换时,仅靠 Bookmark 无法保证一致性。此类场景需结合将已处理文件移动到其他 S3 前缀的方式,或在 DynamoDB 中记录已处理键自行管理幂等性。使用 Glue Workflow 可将多个 Crawler 和作业按依赖关系串联,结合 Step Functions 可构建包含错误处理和条件分支的复杂数据管道。

共有するXB!