什么是好的架构?我应该使用哪些工具在像 AWS 这样的云中每月一次下载和处理多个文件?
What would be a good architecture and which tools should I use for downloading and processing multiple files once per month in a cloud like AWS?
嘿 Stackflow 社区,
我正在寻找一个好的架构和工具来满足以下要求:
在每个月的特定日期自动执行:
- 获取要从 Internet 源下载的 URL 列表(目前 python 脚本保存要下载的 URL 的 csv)
- 尽可能快地(并行?)下载并保存 pdf 文件并处理 http 错误,例如许多请求 429(x 秒后重试?)和 404 错误(记录它们)
- 运行 python 中的脚本将遍历每个 pdf 文件,从文本中提取一些信息并将它们存储在数据框中,该数据框将导出为 csv。如何并行化? Map/Reduce 在集群中还是只是一台有许多 cpu 核心的大机器?
我想在像 AWS 这样的云服务上进行设置。
我想到的一个解决方案是设置一个 Airflow Container,它按顺序启动所有这些任务。
在这个解决方案中,我的缺点是我必须为这个容器支付整个月的费用,但我每个月只需要一次。我不想每次都手动启动和关闭实例。
感谢您的帮助!
我会自己回答这个问题,因为我找到了一个非常好的解决方案。
我使用了 AWS 无服务器和 PaaS 工具。
Workflow/architecture如下:
- CloudWatch 事件在每个月的第一个工作日触发指定的 lambda 函数
- 被调用的 lambda 函数从 AWS CloudWatch 调用中提取元数据(即实际时间)并调用脚本下载 csv 并将其保存到 S3 存储服务。然后将使用 csv 文件的路径作为参数调用另一个脚本。使用 lambda 的一个优点是您可以为每个请求获得另一个 IP 地址,因此您不会 运行 速率限制并且不会被阻止。
- 该脚本使用 Map 函数启动一些 AWS Step Functions。使用 AWS Step Functions 的原因是一次控制最大请求数。如果我对每个文件调用 lambda 函数,那么 10000 个下载请求将同时到达服务器,这将破坏大多数服务器。由于每个 StepFunction 实例的最大事件数为 25,000,我不得不将我的请求拆分为多个 Step Functions。
- 下载的文件将添加到 AWS SQS 中的队列中,该队列对每个文件调用 lambda 函数
- lambda 函数从 SQS 获取文件的地址,并提取 json 个文件中每个文件的数据,这些文件将存储在 S3 中。如果提取失败,文件将被添加到包含失败文件路径的 SQS 队列中。准备好进行手动处理和错误修复
- 将在 AWS Glue
的帮助下创建存储的 json 文件的架构
- schema中的数据可以在AWS Athena中查询和提取
嘿 Stackflow 社区, 我正在寻找一个好的架构和工具来满足以下要求:
在每个月的特定日期自动执行:
- 获取要从 Internet 源下载的 URL 列表(目前 python 脚本保存要下载的 URL 的 csv)
- 尽可能快地(并行?)下载并保存 pdf 文件并处理 http 错误,例如许多请求 429(x 秒后重试?)和 404 错误(记录它们)
- 运行 python 中的脚本将遍历每个 pdf 文件,从文本中提取一些信息并将它们存储在数据框中,该数据框将导出为 csv。如何并行化? Map/Reduce 在集群中还是只是一台有许多 cpu 核心的大机器?
我想在像 AWS 这样的云服务上进行设置。
我想到的一个解决方案是设置一个 Airflow Container,它按顺序启动所有这些任务。 在这个解决方案中,我的缺点是我必须为这个容器支付整个月的费用,但我每个月只需要一次。我不想每次都手动启动和关闭实例。
感谢您的帮助!
我会自己回答这个问题,因为我找到了一个非常好的解决方案。
我使用了 AWS 无服务器和 PaaS 工具。
Workflow/architecture如下:
- CloudWatch 事件在每个月的第一个工作日触发指定的 lambda 函数
- 被调用的 lambda 函数从 AWS CloudWatch 调用中提取元数据(即实际时间)并调用脚本下载 csv 并将其保存到 S3 存储服务。然后将使用 csv 文件的路径作为参数调用另一个脚本。使用 lambda 的一个优点是您可以为每个请求获得另一个 IP 地址,因此您不会 运行 速率限制并且不会被阻止。
- 该脚本使用 Map 函数启动一些 AWS Step Functions。使用 AWS Step Functions 的原因是一次控制最大请求数。如果我对每个文件调用 lambda 函数,那么 10000 个下载请求将同时到达服务器,这将破坏大多数服务器。由于每个 StepFunction 实例的最大事件数为 25,000,我不得不将我的请求拆分为多个 Step Functions。
- 下载的文件将添加到 AWS SQS 中的队列中,该队列对每个文件调用 lambda 函数
- lambda 函数从 SQS 获取文件的地址,并提取 json 个文件中每个文件的数据,这些文件将存储在 S3 中。如果提取失败,文件将被添加到包含失败文件路径的 SQS 队列中。准备好进行手动处理和错误修复
- 将在 AWS Glue 的帮助下创建存储的 json 文件的架构
- schema中的数据可以在AWS Athena中查询和提取