Je ne comprends pas tout à fait le paramètre spark.task.cpus
. Il me semble qu'une «tâche» correspond à un «fil» ou un «processus», si vous voulez, au sein de l'exécuteur. Supposons que je mets "spark.task.cpus" à 2.Nombre de processeurs par tâche dans Spark
Comment un thread peut-il utiliser deux processeurs simultanément? Ne pourrait-il pas exiger des verrous et causer des problèmes de synchronisation? Je regarde
launchTask()
fonction dans deploy/executor/Executor.scala, et je ne vois aucune notion de "nombre de processeurs par tâche" ici. Alors, où/comment Spark finit par allouer plus d'un CPU à une tâche en mode autonome?
J'ajouterais qu'il est utilisé partout dans la source comme 'CPUS_PER_TASK' bien qu'il ne soit pas vraiment appliqué à l'exécution (plus d'indication d'utilisation des ressources qu'une limitation stricte) – zero323
avez-vous un exemple montrant comment une tâche peut être parallélisée en interne ? Le CPUS_PER_TASK est utilisé dans une planification de très haut niveau, il n'est jamais transmis à l'exécuteur. Donc, ma question est "comment nous assurons-nous qu'une tâche obtient les cœurs spark.task.cpus qu'elle a demandés?" – smz
La manière la plus simple (pas très utile): 'rdd.mapPartitions (_. ToVector.par.map (foo))'. Et pour répondre à votre deuxième question, nous ne le faisons tout simplement pas. Il dit seulement que si vous déclarez quatre coeurs d'exécuteur, et que 'spark.task.cpus' est égal à 2 alors il ne peut démarrer que 2 tâches. Mais il y a une allocation physique des cœurs ou des choses similaires. 'core' dans Spark est juste un fil. – zero323