Понимание распределения ресурсов для рабочих заданий на мезо

Я работаю над проектом в Spark и недавно переключился с использования Spark Standalone на Mesos для управления кластером. Теперь я не понимаю, как распределять ресурсы при отправке работы в новой системе.

В автономном режиме я использовал что-то вроде этого (следуя некоторым рекомендациямэто сообщение в блоге Cloudera:

/opt/spark/bin/spark-submit --executor-memory 16G --executor-cores 8 
    --total-executor-cores 240 myscript.py

Это кластер, в котором каждая машина имеет 16 ядер и ~ 32 ГБ оперативной памяти.

Что было приятно в этом, так это то, что я хорошо контролировал количество исполнителей и ресурсы, выделенные каждому. В приведенном выше примере я знал, что получаю 240/8 = 30 исполнителей, каждый с 16 ГБ памяти и 8 ядрами. Учитывая память на каждой машине в кластере, это будет составлять не более двух исполнителей, работающих на каждой машине. Если бы я хотел больше исполнителей, я мог бы сделать что-то вроде

/opt/spark/bin/spark-submit --executor-memory 10G --executor-cores 5 
    --total-executor-cores 240 myscript.py

Теперь это даст мне 240/5 = 47 исполнителей, каждый с 5 ядрами и 10 ГБ памяти, и позволит использовать до 3 исполнителей на машину.

Но теперь, когда я нахожусь на mesos, я немного запутался. Во-первых, я работаю в грубом режиме, чтобы гарантировать, что я могу исправить и контролировать свое распределение ресурсов (это в сервисе довольно сложной модели, где мы хотим предварительно распределить ресурсы).

Теперь я могу указать--total-executor-cores а также--executor-memory, но документация говорит мне, что--exeuctor-cores применяется только к Spark standalone и YARN, что затрудняет указание общего количества исполнителей и ресурсов, выделенных каждому. Скажи, что я запускаю это:

/opt/spark/bin/spark-submit --total-executor-cores 240 --executor-memory 16G --conf spark.mesos.coarse=true myscript.py

Когда я рассматриваю эту работу в веб-интерфейсе Mesos, все становится запутанным. Итак, вот мои вопросы:

Терминология. В веб-интерфейсе перечислены «рамки», которые, как я полагаю, соответствуют «заданиям» в автономном интерфейсе. Но когда я нажимаю на детали для определенного каркаса, он перечисляет «задачи». Но это не могут быть настоящие задачи Spark, верно? Насколько я могу судить, «задача» здесь должна означать «исполнитель», если говорить о Спарк. Это согласуется с пользовательским интерфейсом, который говорит, что моя структура (задание) имеет: 15 активных задач, 240 процессоров и 264 ГБ памяти.

264/15 = 17,6, что, по-видимому, согласуется с 16 ГБ памяти на каждого исполнителя, которого я указал (плюс некоторые накладные расходы, я думаю). Правильно ли я понимаю, как я все это интерпретирую?

Предполагая, что да, когда я проверяю любую из этих «задач» (исполнителей), я вижу, что каждому назначено 16 ядер. Учитывая, что у нас есть 16 ядер на машину, это, похоже, указывает на то, что я в основном работаю по одному исполнителю на каждой из 16 машин, и что каждый исполнитель получает полные 16 ядер, но только 16 ГБ оперативной памяти. (обратите внимание, что даже если я уронить--executor-memory Кстати, до 4 ГБ, mesos все еще просто запускает одного исполнителя на узел (16 ядер и 4 ГБ ОЗУ). Но я хочу сделать что-то вроде моих первых двух примеров. То есть я хочу запустить несколько исполнителей для каждого узла, каждый из которых использует ОЗУ и ядра этого узла (т.е. умеренное количество ядер перед исполнителем, 5-8). Учитывая, что я не могу указать--executor-cores в Месосе, как мне это сделать? Или я по какой-то причине ухожу из базы, даже желая достичь этого? Разве Mesos просто не разрешит множественные exeuctors на узел?

Ответы на вопрос(2)

Ваш ответ на вопрос