AWS Glue 爬虫与作业入门实战教程

AWS Glue 爬虫与作业入门实战教程

【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. 【免费下载链接】aws-doc-sdk-examples 项目地址: https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples

概述

本文将通过一个完整的实战案例,演示如何使用Python SDK(Boto3)操作AWS Glue服务,实现数据爬取、转换和加载的完整ETL流程。我们将创建一个爬虫程序来自动发现S3中的CSV数据,然后通过Glue作业将其转换为JSON格式。

准备工作

在开始之前,请确保您已具备以下条件:

  1. 已创建具有足够权限的IAM角色(需包含AWSGlueServiceRole策略)
  2. 已准备好S3存储桶用于存放作业脚本和输出结果
  3. 已安装并配置好AWS CLI和Boto3 SDK

核心概念解析

AWS Glue爬虫

爬虫(Crawler)是AWS Glue的一个重要组件,它能自动扫描数据存储(如S3),识别数据格式和结构,并在Glue数据目录中创建元数据表。这些元数据表可以被后续的ETL作业引用。

AWS Glue作业

作业(Job)是执行实际ETL工作的单元。它可以从数据源读取数据,应用用户定义的转换逻辑,然后将结果写入目标位置。作业使用Apache Spark作为执行引擎。

实战步骤详解

1. 创建爬虫

首先我们需要创建一个爬虫,配置它扫描指定的S3位置:

wrapper.create_crawler(
    crawler_name,
    self.glue_service_role.arn,
    db_name,
    db_prefix,
    data_source,
)

参数说明:

  • crawler_name: 爬虫名称
  • glue_service_role.arn: Glue服务角色ARN
  • db_name: 要创建的元数据库名称
  • db_prefix: 表名前缀
  • data_source: 数据源S3路径

2. 运行爬虫

创建完成后,启动爬虫执行数据发现:

wrapper.start_crawler(crawler_name)

爬虫运行需要一定时间,我们可以通过轮询检查状态:

while crawler_state != "READY":
    self.wait(10)
    crawler = wrapper.get_crawler(crawler_name)
    crawler_state = crawler["State"]

3. 检查爬取结果

爬虫完成后,我们可以查看生成的元数据:

database = wrapper.get_database(db_name)
tables = wrapper.get_tables(db_name)

4. 创建ETL作业

接下来创建ETL作业,指定转换脚本:

wrapper.create_job(
    job_name,
    "Getting started example job.",
    self.glue_service_role.arn,
    f"s3://{self.glue_bucket.name}/{job_script}",
)

5. 运行作业并监控

启动作业并监控其执行状态:

job_run_id = wrapper.start_job_run(
    job_name, db_name, tables[0]["Name"], self.glue_bucket.name
)

while job_run_status not in ["SUCCEEDED", "STOPPED", "FAILED", "TIMEOUT"]:
    self.wait(10)
    job_run = wrapper.get_job_run(job_name, job_run_id)
    job_run_status = job_run["JobRunState"]

6. 查看作业结果

作业成功后,可以从S3下载转换后的数据:

job_data = io.BytesIO()
self.glue_bucket.download_fileobj(keys[key_index - 1], job_data)
job_data.seek(0)
for _ in range(lines):
    print(job_data.readline().decode("utf-8"))

7. 资源清理

使用完毕后,记得清理创建的资源:

wrapper.delete_job(job_name)
wrapper.delete_table(db_name, table["Name"])
wrapper.delete_database(db_name)
wrapper.delete_crawler(crawler_name)

技术要点解析

  1. 数据格式转换:本例实现了从CSV到JSON的格式转换,这是数据湖中常见的数据格式转换场景。

  2. 元数据管理:Glue数据目录自动维护了数据源的元数据,包括字段名、数据类型等,极大简化了ETL开发。

  3. 作业脚本:实际的转换逻辑由Python脚本实现,Glue提供了丰富的转换API。

  4. 执行监控:通过轮询API可以实时获取作业执行状态,便于构建自动化流程。

最佳实践建议

  1. 命名规范:为爬虫、数据库、作业等资源制定统一的命名规范,便于管理。

  2. 错误处理:在生产环境中需要完善错误处理和重试机制。

  3. 性能优化:对于大数据量作业,可以调整作业参数如Worker类型和数量。

  4. 权限最小化:遵循最小权限原则配置IAM角色。

总结

通过本教程,我们完整演示了使用AWS Glue进行数据ETL的流程。Glue服务简化了数据准备和转换工作,使开发者可以专注于业务逻辑而非基础设施管理。这种无服务器架构特别适合需要处理多种数据源、数据格式变化的场景。

【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. 【免费下载链接】aws-doc-sdk-examples 项目地址: https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值