Ответ 1
Насколько я знаю, spark.task.cpus
управляет parallelism задачами в вашем кластере в случае, когда некоторые определенные задачи имеют собственный внутренний (пользовательский) parallelism.
Подробнее:
Мы знаем, что spark.cores.max
определяет, сколько потоков (aka core) требуется вашему приложению. Если вы оставите spark.task.cpus = 1
, тогда вы будете иметь # spark.cores.max количество одновременных задач Spark, запущенных одновременно.
Вам нужно только изменить spark.task.cpus
, если вы знаете, что ваши задачи сами распараллеливаются (возможно, каждая ваша задача порождает два потока, взаимодействует с внешними инструментами и т.д.). Установив spark.task.cpus
соответственно, вы станете хорошим "гражданин". Теперь, если у вас есть spark.cores.max = 10 и spark.task.cpus = 2 Spark будет создавать только 10/2 = 5 одновременных задач. Учитывая, что ваши задачи требуют (скажем) 2 потока внутри, общее количество выполняемых потоков никогда не будет больше 10. Это означает, что вы никогда не переходите от своего первоначального контракта (определяется spark.cores.max
).