web-dev-qa-db-fra.com

Spark cluster rempli de délais d'expiration de pulsations, les exécutants quittant leurs propres

Mon cluster Apache Spark exécute une application qui me donne beaucoup de délais d'exécuteur:

10:23:30,761 ERROR ~ Lost executor 5 on slave2.cluster: Executor heartbeat timed out after 177005 ms
10:23:30,806 ERROR ~ Lost executor 1 on slave4.cluster: Executor heartbeat timed out after 176991 ms
10:23:30,812 ERROR ~ Lost executor 4 on slave6.cluster: Executor heartbeat timed out after 176981 ms
10:23:30,816 ERROR ~ Lost executor 6 on slave3.cluster: Executor heartbeat timed out after 176984 ms
10:23:30,820 ERROR ~ Lost executor 0 on slave5.cluster: Executor heartbeat timed out after 177004 ms
10:23:30,835 ERROR ~ Lost executor 3 on slave7.cluster: Executor heartbeat timed out after 176982 ms

Cependant, dans ma configuration, je peux confirmer que j'ai augmenté avec succès l'intervalle de pulsation de l'exécuteur: enter image description here

Lorsque je consulte les journaux des exécuteurs portant la mention EXITED (c'est-à-dire que le pilote les a supprimés lorsqu'il n'arrivait pas à battre le cœur), il semble que les exécuteurs se soient suicidés parce qu'ils n'avaient reçu aucune tâche du pilote:

16/05/16 10:11:26 ERROR TransportChannelHandler: Connection to /10.0.0.4:35328 has been quiet for 120000 ms while there are outstanding requests. Assuming connection is dead; please adjust spark.network.timeout if this is wrong.
16/05/16 10:11:26 ERROR CoarseGrainedExecutorBackend: Cannot register with driver: spark://[email protected]:35328

Comment puis-je désactiver les battements de coeur et/ou empêcher les exécuteurs de s'exécuter?

27
crockpotveggies

La réponse était plutôt simple. Dans mon spark-defaults.conf Je règle le spark.network.timeout à une valeur supérieure. L'intervalle de pulsation cardiaque était quelque peu hors de propos par rapport au problème (bien que le réglage soit pratique).

Lorsque vous utilisez spark-submit J'ai également pu définir le délai d'attente comme suit:

$SPARK_HOME/bin/spark-submit --conf spark.network.timeout 10000000 --class myclass.neuralnet.TrainNetSpark --master spark://master.cluster:7077 --driver-memory 30G --executor-memory 14G --num-executors 7 --executor-cores 8 --conf spark.driver.maxResultSize=4g --conf spark.executor.heartbeatInterval=10000000 path/to/my.jar
27
crockpotveggies

Les battements de coeur manquants et les exécuteurs exécutés par YARN sont presque toujours dus aux MOO. Vous devez inspecter les journaux des exécuteurs individuels (recherchez le texte "dépassant la mémoire physique"). Si vous avez plusieurs exécutants et que vous trouvez fastidieux d’inspecter manuellement tous les journaux, je vous recommande de surveiller votre travail dans l’interface utilisateur Spark pendant son exécution. Dès qu’une tâche échoue, le système le signale. Notez que certaines tâches rapporteront des échecs dus à des exécuteurs manquants déjà tués, alors assurez-vous d’examiner les causes de chacune des tâches ayant échoué.

Notez également que la plupart des problèmes de MOO peuvent être résolus rapidement en repartitionnant simplement vos données aux emplacements appropriés dans votre code (consultez à nouveau l'interface utilisateur de Spark pour des indications sur les cas où un appel pourrait être nécessaire). à repartition), sinon, vous voudrez peut-être agrandir vos machines pour répondre aux besoins en mémoire.