来自外部REST API的AWS Glue作业消耗数据

时间:2020-01-13 09:55:33

标签: aws-glue aws-glue-data-catalog

我正在尝试创建一个工作流,其中AWS Glue ETL作业将从外部REST API而不是S3或任何其他AWS内部源中提取JSON数据。 那有可能吗?有人吗 请帮忙!

2 个答案:

答案 0 :(得分:2)

是的,我确实从REST API(例如Twitter,FullStory,Elasticsearch等)中提取数据。通常,我确实使用Python Shell作业进行提取,因为它们的速度更快(冷启动相对较小)。完成后,它会触发一个Spark类型的作业,该作业仅读取我需要的json项目。 我使用请求pyhton库。

为了将数据保存到S3中,您可以执行以下操作

import boto3
import json

# Initializes S3 client
s3 = boto3.resource('s3')

tweets = []
//Code that extracts tweets from API
tweets_json = json.dumps(tweets)
obj = s3.Object("my-tweets", "tweets.json")
obj.put(Body=data)

答案 1 :(得分:1)

AWS Glue Python Shell执行程序的最大限制为1个DPU。 如果这是一个问题(例如我的情况),则可以将解决方案作为任务在ECS中运行脚本。

您可以使用python中的asyncio和aiohttp之类的库,每秒运行约150个请求。 example 1example 2

然后,您可以使用Ray在多个ECS任务或Kubernetes窗格中分配您的请求。 Here,您会找到一些有关Ray可以为您做什么的示例。

这也使您可以限制速率来使用API​​。

收集完所需的所有数据后,通过AWS Glue运行它。