Использование EFS с AWS Lambda (проблема с памятью)

У меня вопрос по поводу использования EFS в качестве дополнительного места в памяти для лямбды. Я использую python вместе с pandas для выполнения некоторых тестов на моих файлах. И это прекрасно работает, если файлы не такие большие, но если файлы превышают 2-3 ГБ, лямбда умирает из-за ограничения памяти (используя как максимальную память, так и время лямбды). Файлы изначально расположены на S3, и мне интересно, можно ли использовать EFS в этом сценарии? Если да, то что потребуется для этого решения. Нужно ли мне передавать файлы с S3 в EFS, чтобы открыть их? Или есть лучшее решение, где я могу напрямую загружать файлы с S3 в EFS и открывать их с помощью панд. А также есть ограничение по времени ожидания, но я надеюсь, что это не будет проблемой, если лямбда будет быстрее с EFS.


person Komsho    schedule 01.03.2021    source источник


Ответы (1)


Насколько я знаю, pandas требует, чтобы весь файл помещался в память. В принципе, в памяти Lambda можно разместить файлы большего размера, поскольку теперь вы можете настраивать функции Lambda с объемом оперативной памяти до 10 ГБ.

Это не означает, что вы можете прочитать файл размером 10 ГБ с S3 и создать из него кадр данных, потому что для того, чтобы панды могли анализировать данные, они должны быть либо сохранены на диске (из которых доступно только 500 МБ). вы) или в памяти.

Если вы загружаете файл в память, он также занимает свой размер в системной памяти, а затем вы можете создать из него фрейм данных pandas. Структуры данных Pandas, вероятно, больше, чем необработанные байты файла, поэтому я предполагаю, что вы можете загрузить файл из S3 в память и превратить его во фрейм данных, который составляет около 30-40% объема памяти лямбда-функции. .

Если вы сохраните этот файл в EFS, вы сможете вместить больше памяти, потому что панды могут читать байты с диска, поэтому вы, вероятно, сможете выжать еще несколько гигабайт. Однако эти операции ввода-вывода требуют времени, и время выполнения Lambda ограничено не более чем 15 минутами. Вероятно, вам также нужно куда-то записать эти данные, что также требует времени.

Итог: загружать файлы большего размера в Lambda, вероятно, не очень хорошая идея. Если вы можете, разбейте набор данных на более мелкие фрагменты и заставьте лямбда-функции работать с ними параллельно или выберите сервис, такой как Athena, EMR или Glue ETL, которые созданы для обработки этого материала.

person Maurice    schedule 01.03.2021
comment
Спасибо, что ответили @Maurice. Будет ли партия также хорошим решением для этого? - person Komsho; 02.03.2021
comment
Пакетная обработка — это, по сути, оркестратор для контейнеров докеров, которые работают с задачами, вы также можете реализовать его с помощью пакетной обработки. Если это хорошее решение, зависит от ваших ограничений с точки зрения времени и бюджета. - person Maurice; 02.03.2021