【问题标题】:How to ETL very large csv from AWS S3 to Dynamo如何 ETL 非常大的 csv 从 AWS S3 到 Dynamo
【发布时间】:2020-07-08 22:36:28
【问题描述】:

在这里寻找一些提示。我使用 python3 和 lambda 进行了一些安静的编码和研究。但是,超时是我在 atm 上苦苦挣扎的最大问题。我正在尝试从 S3 读取一个非常大的 csv 文件(3GB)并将这些行推送到 DynamoDB 中。我目前一次读取大约 1024 * 32 字节,然后使用 pub/sub 模式将行推送到 dynamo DB(使用 asyncio 批量写入),它适用于小文件,即 ~500K 行。当我有数百万行时,它会超时。我试图不使用 AWS 胶水和/或 EMR。我有一些限制/限制。

有谁知道这是否可以使用 Lambda 或步进函数来完成?如果是这样,你能分享你的想法吗?谢谢!!

【问题讨论】:

  • 这可以使用多处理和读写块来完成吗?

标签: python-3.x aws-lambda aws-step-functions


【解决方案1】:

除了 lambda 时间限制之外,您在 AWS Lambda 中读取文件时可能会遇到 lambda 内存限制,因为 lambda 仅具有 512 MB 的 /tmp 目录存储空间,这再次取决于您在 lambda 中读取文件的方式。

如果您不想通过 AWS Glue 或 EMR,您可以做的另一件事是预置 EC2 并从那里运行您在 lambda 中运行的相同代码。为了使其具有成本效益,您可以将 EC2 设置为瞬态,即在您需要将 S3 运行到 DynamoDB 作业时对其进行配置,并在作业完成后将其关闭。这种瞬态特性可以通过 Lambda 函数来实现。您也可以使用 Step Functions 进行相同的编排。您可以查看的另一个选项是通过 AWS Datapipeline。

【讨论】:

  • 是的,我使用 step 函数来协调使用 lambdas 和 AWS 批处理作业。效果很好!谢谢!
猜你喜欢
  • 2018-01-30
  • 2018-03-11
  • 1970-01-01
  • 2017-06-09
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
相关资源
最近更新 更多