Como o Spark alcança o paralelismo dentro de uma tarefa em máquinas com vários núcleos ou hiperencadeados

Eu tenho lido e tentado entender como o framework Spark usa seus núcleos emEstar sozinho modo. De acordo com a documentação do Spark, o parâmetro "spark.task.cpus"" é definido como 1 por padrão, o que significa o número de núcleos a serem alocados para cada tarefa.

Questão 1: Para uma máquina com vários núcleos (por exemplo, 4 núcleos no total, 8 threads de hardware), quando "spark.task.cpus = 4", o Spark usará 4 núcleos (1 thread por núcleo) ou 2 núcleos com hiper thread?

O que acontecerá se eu definir "spark.task.cpus = 16", mais do que o número de threads de hardware disponíveis nesta máquina?

Questão 2: Como esse tipo de paralelismo de hardware é alcançado? Tentei analisar o código, mas não consegui encontrar nada que se comunicasse com o hardware ou a JVM para obter um paralelismo no nível do núcleo. Por exemplo, se a tarefa é "filtro", como uma tarefa de filtro único é executada em vários núcleos ou threads?

Talvez esteja faltando alguma coisa. Isso está relacionado ao idioma Scala?

questionAnswers(1)

yourAnswerToTheQuestion