Non capisco il parametro spark.task.cpus
. Mi sembra che un "compito" corrisponda a un "filo" o un "processo", se lo si vuole, all'interno dell'esecutore. Supponiamo che mi ero prefissato "spark.task.cpus" per 2.Numero di CPU per attività in Scintilla
Come può un filo utilizzare contemporaneamente due CPU? Non potrebbe richiedere blocchi e causare problemi di sincronizzazione?
Sto osservando la funzione
launchTask()
in deploy/executor/Executor.scala e non vedo alcuna nozione di "numero di cpu per attività" qui. Quindi, dove/in che modo Spark alla fine assegna più di una CPU a un'attività in modalità standalone?
Vorrei aggiungere che è utilizzato in tutto il sorgente come 'CPUS_PER_TASK' anche se non è realmente applicato in fase di esecuzione (più utilizzo di risorse di una limitazione difficile) – zero323
avete qualche esempio che mostra come un'attività può essere internamente parallelizzata ? @ zero323, CPUS_PER_TASK viene utilizzato in una pianificazione di livello molto elevato, non viene mai passato all'esecutore. Quindi, la mia domanda è "come possiamo assicurarci che un'attività ottenga i core spark.task.cpus che ha richiesto?" – smz
Il modo più semplice (non molto utile): 'rdd.mapPartitions (_. ToVector.par.map (foo))'. E per rispondere alla tua seconda domanda - semplicemente non lo facciamo. Dice solo che se si dichiarano quattro core executor e 'spark.task.cpus' è uguale a 2 allora può iniziare solo 2 attività. Ma c'è l'allocazione dei nuclei fisici o cose simili. 'core' in Spark è solo una discussione. – zero323