ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

使用 AWS SDK for Kotlin 操作 AWS Glue:Crawler、Data Catalog 与 ETL Job 实战指南

使用 AWS SDK for Kotlin 操作 AWS Glue:Crawler、Data Catalog 与 ETL Job 实战指南 示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome 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.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载导读本文以 kotlin/services/glue/README.md 为主线系统讲解如何使用 AWS SDK for Kotlin 调用 AWS Glue 服务覆盖从创建 Crawler 爬取 S3 中的 CSV 数据、在 Glue Data Catalog 中生成库表元数据到创建并运行 ETL Job 完成数据转换再到清理资源的完整闭环。读完本文你将掌握GlueClient的核心 API 用法、8 个命令行入参的含义与取值约束以及如何用 JUnit 5 对上述场景进行自动化测试。背景AWS Glue 是什么AWS Glue 是一个可扩展的无服务器数据集成服务让开发者可以轻松地发现、准备和组合数据用于分析、机器学习和应用程序开发。在本文对应的代码库中AWS Glue 被用来完成一条典型的数据管道Crawler 扫描公共 Amazon S3 桶中的 CSV 文件将其结构注册到 Glue Data Catalog随后一个 ETL Job 从 S3 读取 CSV、执行转换并把 JSON 格式的结果写回另一个 S3 桶。整个过程通过 AWS SDK for Kotlin 的GlueClient以代码方式驱动而不是在控制台手工点击。运行前的注意事项运行这些代码可能会在你的 AWS 账户中产生费用请参阅 AWS Pricing 与 Free Tier 了解计费规则运行测试同样可能产生费用建议遵循最小权限原则仅授予执行任务所需的最低 IAM 权限这些代码并未在每一个 AWS Region 测试过请确认目标服务在你使用的区域可用。代码示例总览本目录下的全部代码位于 kotlin/services/glue/src/main/kotlin/com/kotlin/glue包括两类示例Basics基础场景——演示一个服务内的核心操作编排Learn the basics完整的“创建 Crawler → 生成 CSV 元数据 → 创建并运行 ETL Job → 清理资源”场景。Single actions单操作示例——每个示例只调用一个服务函数CreateCrawler创建爬虫GetCrawler查询单个爬虫GetDatabase查询数据库StartCrawler启动爬虫扩展示例Custom ExamplesREADME 中还列出了由社区/维护者补充的更多单操作示例均在同一个目录下DeleteCrawler.kt删除爬虫DeleteCrawler操作GetCrawlers.kt列出爬虫GetCrawlers操作GetJobRun.kt查询一次 Job 运行GetJobRun操作GetJobs.kt列出全部 JobGetJobs操作ListWorkflows.kt列出全部 WorkflowListWorkflows操作SearchTables.kt按属性搜索表SearchTables操作StopCrawler.kt停止爬虫StopCrawler操作环境准备Prerequisites运行这些示例前需要先完成 SDK for Kotlin 的开发环境与 AWS 凭证配置。仓库中kotlin文件夹下的 README 提供了完整的 Prerequisites 说明主要包括安装 JDK 与 Kotlin 工具链配置 AWS 凭证例如通过~/.aws/credentials或环境变量使 SDK 可以访问你的账户在 Maven 或 Gradle 中引入aws.sdk.kotlin:glue依赖代码中通过import aws.sdk.kotlin.services.glue.GlueClient使用。数据集准备场景与测试都需要一个包含 CSV 数据的 S3 桶路径。README 明确建议要按照 Tutorial: Adding an AWS Glue crawler 中的步骤准备 CSV 数据和相关前置资源。该教程是 AWS Glue 官方入门教程场景中默认使用的就是它提供的一个公共 S3 桶。单操作示例逐个拆解下面结合源码逐一带你阅读每个单操作示例包括入参格式、关键调用与返回内容。创建 CrawlerCreateCrawler完整源码见 CreateCrawler.kt。命令行需要 5 个参数参数说明IAM具有 AWS Glue 与 S3 权限的 IAM 角色 ARNs3Path包含数据如 CSV的 S3 目标路径cron调度用的 cron 表达式例如cron(15 12 * * ? *)dbName数据库名crawlerName爬虫名核心函数createGlueCrawler的调用链如下构造S3Target { path s3Path }即扫描目标将其放入CrawlerTargets { s3Targets targetList }作为爬虫的 targets构造CreateCrawlerRequest填写databaseName、name、description、targets、role与schedule调用glueClient.createCrawler(request)。从源码看创建请求在 CreateCrawler.kt 中被组装。注意该示例将客户端区域固定为us-west-2与场景示例使用的us-east-1不同说明区域应根据你的数据实际所在区域设置。cron 表达式的写法遵循 AWS Glue 调度语法README 与代码注释给出的示例是cron(15 12 * * ? *)即每天 12:15 UTC。查询单个 CrawlerGetCrawler源码见 GetCrawler.kt仅需 1 个参数crawlerName。它构造GetCrawlerRequest { name crawlerName }并调用getCrawler随后从响应中取出response.crawler?.role并打印该 Crawler 关联的 IAM 角色 ARN。这在运维排查时很有用你可以快速确认某个 Crawler 被授予了哪个角色。查询数据库GetDatabase源码见 GetDatabase.kt参数为dbName。调用getDatabase后打印response.database?.description即 Glue Data Catalog 中该数据库的描述信息。该操作与GetTables配合即可完整查看一个库的元数据。启动 CrawlerStartCrawler源码见 StartCrawler.kt参数为crawlerName。调用glueClient.startCrawler(request)后打印$crawlerName was successfully started.。启动后 Crawler 会按预设的 schedule 或立即运行扫描 S3 目标并生成表定义。停止 CrawlerStopCrawler源码见 StopCrawler.kt参数为crawlerName。调用glueClient.stopCrawler(request)停止正在运行的爬虫。它适用于需要终止耗时爬取任务的场景。删除 CrawlerDeleteCrawler源码见 DeleteCrawler.kt参数为crawlerName。调用glueClient.deleteCrawler(request)。注意删除前通常需要确保 Crawler 已停止。场景示例中专门等待了 5 分钟让 Crawler 进入可删除状态。列出 CrawlerGetCrawlers源码见 GetCrawlers.kt无参数。它构造GetCrawlersRequest { maxResults 10 }调用getCrawlers遍历response.crawlers打印每个 Crawler 名称。maxResults控制单次返回条数可用于分页浏览账户内全部爬虫。查询 Job 运行GetJobRun源码见 GetJobRun.kt需要 2 个参数参数说明jobNameJob 名称runId可从 AWS 管理控制台获取的运行 ID函数构造GetJobRunRequest { jobName; runId }调用getJobRun并打印runResponse.jobRun的完整字符串表示——其中包含 Job 运行状态、开始/结束时间等关键信息是监控 ETL 作业的常用手段。搜索表SearchTables源码见 SearchTables.kt参数为text用于全文搜索的字符串。关键调用SearchTablesRequest { searchText text resourceShareType ResourceShareType.All maxResults 10 }resourceShareType All表示同时搜索本账户与共享给他的资源中的表。遍历response.tableList打印每个表的name与databaseName。完整场景Learn the basicsGlueScenario场景示例 GlueScenario.kt 是整个目录的核心它演示了完整的工作流创建 Crawler爬取一个公共 Amazon S3 桶生成 CSV 格式元数据对应的数据库列出数据库与表的信息Glue Data Catalog 中的内容创建 Job从 S3 桶提取 CSV 数据、转换数据并将 JSON 格式输出加载到另一个 S3 桶列出 Job 运行信息、查看转换后的数据并清理资源。命令行参数场景main函数接收8 个参数少于 8 个会打印用法说明并退出参数说明iam具有 AWS Glue 与 S3 权限的 IAM 角色 ARNs3Path包含数据如 CSV的 S3 目标路径croncron 表达式例如cron(15 12 * * ? *)dbName数据库名crawlerName爬虫名jobName赋给 Job 定义的名称scriptLocation运行 Job 的脚本所在的 S3 路径locationUri数据库的位置URI执行流程源码级拆解main中的调用顺序体现了完整的生命周期管理createDatabase(dbName, locationUri) // 1. 创建数据库 createCrawler(iam, s3Path, cron, dbName, crawlerName) // 2. 创建爬虫 getCrawler(crawlerName) // 3. 验证爬虫 startCrawler(crawlerName) // 4. 启动爬虫 getDatabase(dbName) // 5. 查询数据库 getGlueTables(dbName) // 6. 列出库内表 createJob(jobName, iam, scriptLocation) // 7. 创建 ETL Job startJob(jobName) // 8. 运行 Job getJobs() // 9. 列出 Job getJobRuns(jobName) // 10. 查看运行 deleteJob(jobName) // 11. 删除 Job TimeUnit.MINUTES.sleep(5) // 12. 等待爬虫可删除 deleteMyDatabase(dbName) // 13. 删除数据库 deleteCrawler(crawlerName) // 14. 删除爬虫创建数据库createDatabase构造DatabaseInputDatabaseInput { description Built with the AWS SDK for Kotlin name dbName locationUri locationUriVal }其中locationUri即数据库底层存储位置S3 前缀或 Hive 风格 URI。随后以CreateDatabaseRequest { databaseInput input }调用createDatabase。注意所有客户端都使用GlueClient.fromEnvironment { region us-east-1 }并通过.use {}自动释放资源。创建 Crawler 与启动createCrawler与单操作示例逻辑一致但描述文案为 Created by the AWS Glue Java API沿用了 Java V2 SDK 示例的注释文案属于历史遗留不影响功能。startCrawler启动后Crawler 将按 cron 调度或立即扫描 S3 桶中的 CSV 文件。查看 Data CataloggetDatabase打印数据库描述getGlueTables通过GetTablesRequest { databaseName dbName }调用getTables遍历tableList打印每个表名。这一步验证了 Crawler 是否成功将 S3 数据注册为 Glue 表——CSV 文件的列结构此时已写入 Data Catalog。创建 ETL JobcreateJob是本场景的关键。JobCommand指定运行引擎与脚本JobCommand { pythonVersion 3 name MyJob1 scriptLocation scriptLocationVal }CreateJobRequest的完整配置为CreateJobRequest { description A Job created by using the AWS SDK for Java V2 glueVersion 2.0 workerType WorkerType.G1X numberOfWorkers 10 name jobName role iam command commandOb }glueVersion 2.0指定 Glue 运行时版本workerType WorkerType.G1XG.1X 类型的 worker每 worker 提供 16 GB 内存与相应 vCPU适合标准 ETLnumberOfWorkers 10分配的 worker 数量直接影响并行度与成本command.name MyJob1表示任务类型为 Glue 内建 ETLpythonshell 之外的默认类型scriptLocation指向 S3 中存放的 Python 脚本该脚本实现“读 CSV → 转换 → 写 JSON”的逻辑。运行 JobstartJob构造StartJobRunRequestStartJobRunRequest { workerType WorkerType.G1X numberOfWorkers 10 jobName jobNameVal }调用startJobRun后打印返回的jobRunId。每次运行都会生成一个唯一 ID可用于后续GetJobRun查询状态。列出与清理getJobs以maxResults 10列出 JobgetJobRuns按jobName列出历史运行。清理阶段依次deleteJob→ 等待 5 分钟 →deleteMyDatabase→deleteCrawler。其中5 分钟等待是场景代码的明确行为AWS Glue 中刚创建的 Crawler 需要一段时间才能进入可删除状态。用 JUnit 5 自动化测试README 说明本目录的 Kotlin 示例可以使用名为GlueTest的测试文件进行验证。该文件使用 JUnit 5位于 kotlin/services/glue/src/test/kotlin/GlueTest.kt。从测试源码可以看到测试类使用TestInstance(TestInstance.Lifecycle.PER_CLASS)与TestMethodOrder(OrderAnnotation::class)控制实例生命周期与执行顺序每个测试通过runBlocking调用被测试的挂起函数测试值通过 AWS Secrets Manager 读取getSecretValues()从名为test/glue的 Secret 中获取 JSON并用 Gson 反序列化为SecretValues数据类测试中crawlerNameSc、jobNameSc、dbNameSc会追加UUID.randomUUID()避免多次运行时因重名冲突测试按Order依次执行Test 1getCrawlersTest→ Test 2getDatabasesTest→ Test 3searchTablesTest→ Test 4listWorkflowsTest。测试依赖的属性PropertiesREADME 对运行测试所需的属性给出了明确清单。这些值原本定义在config.properties位于 resources 文件夹在当前仓库版本中测试已改为从 Secrets Manager 读取字段含义如下字段说明IAM具有 AWS Glue 与 S3 权限的 IAM 角色 ARNs3Path包含数据如 CSV的 S3 目标路径croncron 表达式例如cron(15 12 * * ? *)crawlerName多个测试中使用的爬虫名existingCrawlerName将被删除的已有爬虫名databaseNameCreateCrawler测试使用的数据库名existingDatabaseName已有数据库名tableNameGetTable测试使用的表名textSearchTables测试使用的搜索字符串jobNameSc场景测试使用的 Job 名s3PathSc场景测试使用的 S3 数据路径dbNameSc场景测试使用的数据库名crawlerNameSc场景测试使用的爬虫名scriptLocationSc场景测试中运行 Job 的脚本所在 S3 路径locationUri场景测试使用的数据库位置如果这些值未全部定义JUnit 测试会失败。命令行运行测试在包含pom.xml的工程根目录执行mvn test预期输出如下[INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running GlueTest Test 1 passed Test 2 passed ... Done! [INFO] Results: [INFO] [INFO] Tests run: 11, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] -------------------------------------------- [INFO] BUILD SUCCESS [INFO] Total time: 12.003 s你可以在 IDE如 IntelliJ或命令行中运行 JUnit 测试每个测试运行时都会输出成功/失败信息例如Test 3 passed。测试失败排查如果属性/Secret 中定义的值不正确测试将失败Maven 输出BUILD FAILURE例如[INFO] -------------------------------------- [INFO] BUILD FAILURE [INFO] -------------------------------------- [INFO] Total time: 19.038 s [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.1:test (default-test) on project GlueServiceTest: There are test failures.此时需要重新核对属性文件或test/glueSecret 中的每个字段修正后重新运行mvn test。常见问题与最佳实践区域一致性Crawler、数据库、Job 与 S3 数据应位于同一区域。示例中单操作示例混用了us-east-1与us-west-2这是各文件独立编写造成的差异请按你的数据实际位置统一设置。IAM 角色权限iam参数必须是同时具备 AWS Glue 权限与 S3 读写权限的角色 ARN。最小权限原则下应为 Crawler 与 Job 分别准备仅含所需操作权限的角色。cron 表达式格式AWS Glue 的 schedule 使用cron(分 时 日 月 周 年)六字段语法示例cron(15 12 * * ? *)表示每天 12:15 运行其中的?表示“不指定”。资源清理场景中通过“删除 Job → 等待 5 分钟 → 删除数据库 → 删除 Crawler”的顺序回收资源避免遗留计费资源生产环境中建议将等待与重试封装为可复用的清理函数。测试凭据安全当前测试从 AWS Secrets Manager 的test/glueSecret 读取敏感参数不要把 IAM ARN、S3 路径等直接硬编码进测试源码。延伸阅读AWS Glue 开发者指南https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.htmlAWS Glue API 参考https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api.htmlSDK for Kotlin 的 AWS Glue API 参考https://sdk.amazonaws.com/kotlin/api/latest/glue/index.html本仓库更多语言实现可参考go、python、java等目录下的glue示例调用语义一致便于跨语言对照以上链接为 README 原文档提供的官方资源。本文所有代码位置与调用链均以当前仓库 kotlin/services/glue 目录下源码为准。赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome 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.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐使用 AWS SDK for Python (Boto3) 上手 AWS GlueCrawler 数据目录与 ETL Job 实战指南使用 AWS SDK for Python Boto3 上手 AWS GlueCrawler 数据目录与 ETL Job 实战指南 本篇技术指南以仓库 pyt示例工程教程后端AWS SDK for JavaScript (v3) AWS Glue 代码示例指南Crawler、Job 与 Data Catalog 实战AWS SDK for JavaScript v3 AWS Glue 代码示例指南Crawler、Job 与 Data Catalog 实战 导读 本文围绕示例工程教程后端使用 AWS SDK for Kotlin 操作 AWS Elemental MediaConvertCreateJob / GetJob / ListJobs 实战指南使用 AWS SDK for Kotlin 操作 AWS Elemental MediaConvertCreateJob / GetJob / ListJob示例工程教程后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表