Лучшие практики планирования Spark Streaming

У нас есть потоковая работа, которая выполняется каждые 30 минут и занимает 15 секунд, чтобы завершить работу. Каковы рекомендуемые лучшие практики в этих сценариях. Я думаю, что могу запланировать запуск конвейера данных AWS каждые 30 минут, чтобы EMR завершался через 15 секунд и создавался заново. Это рекомендуемый подход?

2 ответа

Решение

Для работы, которая требует 15 seconds запуск его на EMR - это пустая трата времени и ресурсов, вы, скорее всего, подождите несколько минут, пока кластер EMR загрузится.

AWS Data Pipeline или AWS Batch будут иметь смысл только в том случае, если у вас долгое рабочее задание.

Во-первых, убедитесь, что вам действительно нужен Spark, поскольку из того, что вы описали, это может быть излишним.

Лямбда с планированием событий CloudWatch может быть всем, что вам нужно для такой быстрой работы без инфраструктуры для управления.

Для потоковых связанных заданий -> ключ должен был бы избежать ввода-вывода в вашем случае - поскольку задание, похоже, занимает всего 15 секунд. Поместите ваши сообщения в очередь ( AWS SQS). Имейте функцию шага AWS, запускаемую событием Cloudwatch (реализует расписание, подобное Cron, в вашем случае каждые 30 минут - для вызова функции шага AWS), чтобы читать сообщения из SQS и идеально обрабатывать их в лямбда-выражениях.

Итак, один вариант (без сервера):

Потоковые сообщения -> AWS SQS -> (каждые 30 минут cloudwatch запускает пошаговую функцию) -> которая запускает лямбда-сервис для обработки всех сообщений в очереди

https://aws.amazon.com/getting-started/tutorials/scheduling-a-serverless-workflow-step-functions-cloudwatch-events/

Вариант 2:

Потоковая передача сообщений ---> AWS SQS -> Обработка сообщений с использованием приложения Python/ приложения Java Spring, имеющего запланированное задание, которое активируется каждые 30 минут, читает сообщения из очереди и обрабатывает их в памяти.

Я использовал вариант 2 для решения аналитических задач, хотя моя аналитическая задача заняла 10 минут и требовала большого объема данных. Кроме того, для варианта 2 необходимо отслеживать виртуальную машину (контейнер), в которой выполняется процесс. С другой стороны, Вариант 1 без сервера. Наконец, все сводится к программному стеку, который у вас уже есть, и программному обеспечению, необходимому для обработки потоковых данных.

Другие вопросы по тегам