Основное использование приложений Spark Streaming

Мы создаем систему, состоящую из нескольких приложений Spark Streaming, в каждом из которых есть несколько приемников. Насколько я понял, каждому приемнику нужно свое ядро ​​в кластере. Нам нужно несколько приемников для размещения пиков, но они не нужны нам постоянно. Приложения довольно малы и выполняют только одну задачу, чтобы (повторно) отправить их в кластер, не отвлекая другие задания и задачи.

1) Предполагая, что у нас есть 5 заданий с 5 получателями в каждом, нам потребуется по крайней мере 25 ядер в кластере только для того, чтобы работающие приемники + ядра для обработки. Это правильно?

2) Есть ли возможность сделать более динамическое распределение ресурсов или одно ядро ​​строго привязано к одному получателю?

3) Я посмотрел на сервер spark-rest, который дает возможность обмениваться контекстом spark для разных заданий. Не могли бы вы придумать один SparkStreamingContext для всех (~100) рабочих мест?

Мы запускаем кластер в автономном режиме вместе с кластером Cassandra на тех же узлах.

1 ответ

  1. Если вы запустите 5 отдельных приложений Spak, каждое из которых будет иметь 5 получателей, да, загрузка данных будет занимать 5x5=25 ядер. Тем не менее, вы смотрели на подходы без приемника? ( § 2 из https://spark.apache.org/docs/latest/streaming-kafka-integration.html)
  2. Spark имеет возможности динамического размещения на Yarn и Mesos, но это касается исполнителей, а не получателей.
  3. Конвейерная передача данных в пределах меньшего (числа) приложений, кажется, имеет смысл: если у вас есть ~100 приложений, каждое из которых выполняет простой ETL, вероятно, что запуск и планирование этих приложений занимают больше времени, чем выполнение анализа, который они фактически выполняют. Я могу ошибаться в этом, но тогда вам не нужно будет более конкретно рассказывать о том, что они делают (возможно, в другом вопросе SO, после того, как вы сравните результаты?)
Другие вопросы по тегам