Какой сервис AWS следует использовать для обработки большого текстового файла?

У меня есть вариант использования, когда мне нужно прочитать очень большой текстовый файл, который может содержать до 1 миллиона записей. Для каждой записи я должен выполнить некоторую проверку, а затем преобразовать ее в другой JSON, а затем отправить в тему SNS. Мне не нужно читать их последовательно, поэтому я могу использовать параллелизм. Один из вариантов — поместить файл в корзину S3, а затем использовать лямбда-выражение для обработки файла, который разветвляет (асинхронно) записи на несколько лямбда-функций, которые заботятся о преобразовании (и проверке), а затем отправляют его в SNS. Другой вариант — использовать поток kinesis и использовать несколько лямбда-выражений, делающих одно и то же. Несколько лямбд с использованием kinesis потоки

Каким должен быть идеальный способ сделать это?

  1. S3 -> Lambda -> Множественные Lambdas -> SNS
  2. Kinesis -> Multiple Lambdas (или Lambda -> Multiple Lambdas -> SNS)

person Crosk Cool    schedule 24.06.2018    source источник
comment
В каком формате ваши записи? CSV? Что-то другое? Использование Kinesis разумно только в том случае, если вам нужен какой-то порядок или у вас будет несколько источников данных, поэтому я не думаю, что дорога необходима.   -  person Exelian    schedule 24.06.2018
comment
Как часто вы будете это делать? Это просто одноразовое действие, которое никогда не повторится? Есть ли какая-то особая выгода в том, чтобы сделать это как можно быстрее? Есть ли у вас код, выполняющий преобразование (и если да, то на каком языке)? Сколько времени занимает обработка записи, или это ничтожно мало по сравнению со временем ввода/вывода? Если у вас есть программа, которая выполняет эту задачу (без параллельной обработки), сколько времени это займет?   -  person John Rotenstein    schedule 25.06.2018
comment
@Джон Ротенштейн. Это будет задание, которое будет повторяться раз в неделю. Нет особой выгоды в том, чтобы закончить это быстро. У меня есть существующий код (на Java). Это ничтожно мало по сравнению с вводом-выводом, так как он просто получает и устанавливает новый формат с несколькими добавленными полями в метаданных. В настоящее время у меня нет существующей программы, которая выполняет эту задачу.   -  person Crosk Cool    schedule 25.06.2018
comment
Миллион записей не является большим файлом, если только каждая запись не имеет длину в несколько мегабайт. И даже тогда это вполне в пределах возможностей одной машины. И если эти записи не генерируются на нескольких машинах и не объединяются, Kinesis только усложнит работу. Я бы просто написал программу, которая работает на экземпляре EC2. Если вы хотите добавить планирование, запустите его на AWS Batch.   -  person kdgregory    schedule 25.06.2018


Ответы (1)


Возможно, вы захотите изучить AWS Glue. Этот сервис может выполнять ETL для большинства вещей, хранящихся в S3, поэтому он может избавить вас от необходимости делать это самостоятельно. В сочетании с S3, запускающим Lambda, это может быть интересным вариантом?

Редактировать: если файл можно проанализировать с помощью регулярных выражений, возможно, попробуйте Athena? Athena относительно дешева и может без проблем обрабатывать большие файлы.

Если записи имеют предсказуемую длину, вы можете использовать запросы диапазона, чтобы разделить файл, прежде чем передавать его в Lambda, предотвращая длительное время выполнения.

Кроме того, вы пробовали анализировать и разбивать файл на фрагменты с помощью Lambda? 1 миллион записей - это НЕ ТАК много, и простое разделение строк и передача (фрагментов) на проверку (или, возможно, SNS) не должны быть проблемой.

person Exelian    schedule 24.06.2018
comment
S3 с лямбдой кажется интересным, но так как есть много записей (может быть до миллиона) и есть ограничение на то, как долго может работать лямбда. Теперь, если S3 запускает лямбду, которая должна выполнять преобразование для каждой записи, затем переходит в тему SNS. Я думаю, что у лямбды, чем разветвление этой работы на рабочих лямдах (которые преобразуют и толкают), может не хватить времени, даже если она делает это асинхронно. Вот почему я изучал Kinesis. - person Crosk Cool; 24.06.2018
comment
Но с какими записями вы работаете? Можно ли вам, Афина, просто запросить файл? Это 1 файл с 1 миллионом записей или миллион файлов? Является ли бессерверное требование обязательным? - person Exelian; 24.06.2018
comment
1 файл с 1 миллионом записей. И перед отправкой в ​​SNS будет применяться одинаковая проверка и преобразование для каждой записи. - person Crosk Cool; 24.06.2018
comment
Как насчет S3, запускающего лямбду, которая запускает конечный автомат (пошаговые функции), который заботится о передаче пакетов записей нескольким лямбда-выражениям? - person Crosk Cool; 24.06.2018
comment
Это определенно могло бы сработать, но имейте в виду, что пошаговые функции имеют фиксированный параллелизм. Поэтому, если количество записей колеблется, вы не можете изменить количество одновременных лямбда-выражений. - person Exelian; 24.06.2018
comment
Пошаговые функции имеют ограничение на максимальный размер запроса — 1 МБ. docs.aws.amazon.com/step-functions/latest/ dg/limits.html. Я не думаю, что это сработает. - person Crosk Cool; 24.06.2018
comment
Почему не клеить? Не будет ли он соответствовать вашим требованиям к преобразованию файлов, и я думаю, что он может обрабатывать файл с 1 миллионом записей? Все преобразования выполняются с использованием клея, загружают преобразованный файл в S3, а затем запускают лямбда-функцию для отправки записей в тему SNS? Будет ли это осуществимо? - person Yuva; 25.06.2018