Как Spark достигает параллелизма в рамках одной задачи на многоядерных или гиперпоточных машинах

Я читал и пытался понять, как Spark Framework использует свои ядра вStandalone Режим. Согласно документации Spark, параметр "spark.task.cpusЗначение по умолчанию равно 1, что означает количество ядер, выделяемых для каждой задачи.

Вопрос 1: Для многоядерной машины (например, всего 4 ядра, 8 аппаратных потоков), когда «spark.task.cpus = 4», Spark будет использовать 4 ядра (1 поток на ядро) или 2 ядра с гиперпоточностью?

Что произойдет, если я установлю «spark.task.cpus = 16», больше, чем количество доступных аппаратных потоков на этом компьютере?

Вопрос 2: Как достигается этот тип аппаратного параллелизма? Я пытался заглянуть в код, но не смог найти ничего, связывающегося с аппаратным обеспечением или JVM для параллелизма на уровне ядра. Например, если задача является функцией «фильтра», как одиночная задача фильтра распределяется между несколькими ядрами или потоками?

Может быть, я что-то упустил. Это связано с языком Скала?

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

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