使用EFS与AWS Lambda(内存问题)



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

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

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

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

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

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

最新更新