Как ETL очень большой CSV от AWS S3 до Динамо - PullRequest
0 голосов
/ 28 марта 2020

Ищите здесь несколько советов. Я немного потрудился над кодированием и исследованиями, используя python3 и лямбду. Однако тайм-аут - самая большая проблема, с которой я борюсь. Я пытаюсь прочитать очень большой CSV-файл (3 ГБ) из S3 и pu sh строк в DynamoDB. В настоящее время я читаю около 1024 * 32 байта за раз, затем помещаю строки в динамическую БД (пакетная запись с asyncio), используя шаблон pub / sub, и он отлично работает для небольших файлов, то есть ~ 500K строк. Время истекает, когда у меня миллионы строк. Я пытаюсь НЕ использовать AWS клей и / или EMR. У меня есть некоторые ограничения / ограничения с ними.

Кто-нибудь знает, можно ли это сделать с помощью лямбда-функции или пошаговых функций? Если да, не могли бы вы поделиться своими идеями? Спасибо !!

1 Ответ

1 голос
/ 23 апреля 2020

Помимо ограничения времени лямбды, вы можете столкнуться с ограничением памяти лямбда, когда вы читаете файл в AWS Lambda, поскольку лямбда имеет только /tmp хранилище каталогов 512 МБ, и это опять-таки зависит от того, как вы читаете файл в лямбде.

Если вы не хотите go с помощью AWS Glue или EMR, еще одна вещь, которую вы можете сделать, это предоставить EC2 и запустить оттуда тот же код, который вы запускаете в лямбде. Чтобы сделать его экономически эффективным, вы можете сделать EC2 переходным, то есть подготовить его, когда вам нужно запустить задание S3 для DynamoDB, и завершить его, когда задание будет завершено. Эта переходная природа может быть достигнута с помощью лямбда-функции. Вы также можете организовать то же самое с помощью пошаговых функций. Другой вариант, с которым вы можете ознакомиться - через AWS Datapipeline.

...