繁体   English   中英

什么是好的架构,我应该使用哪些工具在像 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 社区,我正在寻找一个好的架构和工具来满足以下要求:

在每个月的特定日期自动执行:

  • 从互联网上的来源获取要下载的网址列表(目前是一个保存要下载的 csv 网址的 python 脚本)
  • 尽可能快地下载和保存 pdf 文件(并行?)并处理 http 错误,例如许多请求 429(x 秒后重试?)和 404 错误(记录它们)
  • 在 python 中运行一个脚本,该脚本将遍历每个 pdf 文件,从文本中提取一些信息并将它们存储在一个数据帧中,该数据帧将作为 csv 导出。 如何并行化它? 在集群中映射/减少还是只是一台具有许多 CPU 内核的大型机器?

我想在像 AWS 这样的云服务上进行设置。

我想到的一个解决方案是设置一个 Airflow Container,它可以按顺序启动所有这些任务。 在这个解决方案中,我的缺点是我必须整个月支付这个容器的费用,但我每个月只需要一次。 我不想每次都手动启动和关闭实例。

谢谢你的帮助!

我会自己回答这个问题,因为我找到了一个非常好的解决方案。

我使用了 AWS 无服务器和 PaaS 工具。

工作流程/架构如下:

  1. CloudWatch 事件在每个月的第一个工作日触发指定的 lambda 函数
  2. 被调用的 lambda 函数从 AWS CloudWatch 调用中提取元数据(即实际时间)并调用脚本下载 csv 并将其保存到 S3 存储服务。 然后将使用 csv 文件的路径作为参数调用另一个脚本。 使用 lambda 的一个优点是您可以为每个请求获得另一个 IP 地址,因此您不会在速率限制中运行,也不会被阻止。
  3. 该脚本使用 Map 函数启动一些 AWS Step Functions。 使用 AWS Step Functions 的原因是为了一次性控制最大请求数。 如果我对每个文件都调用 lambda 函数,那么 10000 个下载请求将同时访问服务器,这将破坏大多数服务器。 由于每个 StepFunction 实例的最大事件数为 25,000,我不得不将我的请求拆分为多个 Step Functions。
  4. 下载的文件将添加到 AWS SQS 中的队列中,该队列对每个文件调用 lambda 函数
  5. 一个 lambda 函数从 SQS 获取文件的地址,并在将存储在 S3 中的 json 文件中提取每个文件的数据。 如果提取失败,该文件将被添加到包含失败文件路径的 SQS 队列中。 准备好进行手动处理和错误修复
  6. 将在 AWS Glue 的帮助下创建来自存储的 json 文件的架构
  7. 可以在 AWS Athena 中查询和提取 schema 中的数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM