【问题标题】:Using EFS with AWS Lambda (memory issue)将 EFS 与 AWS Lambda 结合使用(内存问题)
【发布时间】:2021-05-31 08:58:37
【问题描述】:

我有一个关于 EFS 的用法和 lambda 的附加内存位置的问题。我正在使用 python 和 pandas 对我的文件执行一些测试。如果文件不是那么大,它会很好用,但是如果文件超过 2-3 GB,则由于内存限制(同时使用最大内存和 lambda 时间),lambda 会死掉。文件最初位于 S3,我想知道在这种情况下是否可以使用 EFS?如果是这样,此解决方案需要什么。我是否需要将文件从 S3 传输到 EFS 才能打开它们?或者有更好的解决方案,我可以直接将文件从 S3 加载到 EFS 并用 pandas 打开它们。还有超时限制,但我希望如果 lambda 使用 EFS 会更快,那不会是问题。

【问题讨论】:

    标签: python pandas amazon-web-services aws-lambda amazon-efs


    【解决方案1】:

    据我所知pandas 需要将整个文件放入内存中。 原则上,您可以将较大的文件放入 Lambda 的内存中,因为您现在可以为 Lambda 函数配置高达 10GB 的 RAM。

    这并不意味着您能够从 S3 读取 10GB 文件并从中创建数据帧,因为为了让 pandas 解析数据,它需要存储在磁盘上(其中只有500MB 可供您使用)或内存中。

    如果您将文件下载到内存中,它也会占用系统内存中的大小,然后您可以从中创建一个 pandas 数据框。 Pandas 数据结构可能比文件的原始字节大,所以我的猜测是,您可以将文件从 S3 加载到内存中,并将其转换为大约 lambda 函数内存容量的 30-40% 的数据帧.

    如果您将该文件存储在 EFS 上,您将能够在内存中容纳更多,因为 pandas 可以从磁盘读取字节,因此您可能会挤出更多千兆字节。然而,这些 I/O 操作需要时间,并且 Lambda 最多只能运行 15 分钟。您可能还需要在某个地方写入该数据,这也需要时间。

    底线:将比这更大的文件加载到 Lambda 中可能不是一个好主意。如果可以的话,将数据集分解成更小的块,让 lambda 函数并行处理它们,或者选择 Athena、EMR 或 Glue ETL 等服务,这些服务旨在处理这些内容。

    【讨论】:

    • 感谢您回答@Maurice。批处理也是一个很好的解决方案吗?
    • Batch 基本上是用于处理任务的 docker 容器的编排器,您也可以使用批处理来实现它。这是否是一个好的解决方案取决于您在时间和预算方面的限制。
    猜你喜欢
    • 2016-11-05
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2020-01-25
    • 2019-07-19
    • 1970-01-01
    相关资源
    最近更新 更多