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