Mi Apache Spark clúster se está ejecutando una aplicación que me está dando un montón de albacea tiempos de espera:

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

Sin embargo, en la configuración de mi puedo confirmar que he conseguido aumentar el ejecutor del intervalo de latidos:
La chispa de clúster completo de latido, tiempos de espera, los ejecutores de salir en su propia

Cuando visito los registros de ejecutores marcado como EXITED (es decir: el conductor retira cuando no podía conseguir un latido del corazón), parece que los ejecutores mataron a sí mismos, porque ellos no recibieron ninguna de las tareas del conductor:

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

¿Cómo puedo desactivar los latidos del corazón y/o prevenir los ejecutores de tiempo de espera?

2 Comentarios

  1. 37

    Falta de latidos del corazón y los ejecutores de ser asesinado por HILO es casi siempre debido a OOMs. Usted debe inspeccionar los registros del individuo ejecutores (busque el texto «correr más allá de la memoria física»). Si usted tiene muchos ejecutores y encontrar engorroso para inspeccionar todos los registros de forma manual, me recomiendan el seguimiento de su trabajo en la Chispa de la interfaz de usuario mientras éste se ejecuta. Tan pronto como una tarea falla, se informará de la causa en la interfaz de usuario, por lo que es fácil de ver. Tenga en cuenta que algunas tareas se informe de fracaso debido a la falta de albaceas que ya han muerto, así que asegúrese de buscar las causas para cada uno de los fallando tareas.

    Tenga en cuenta también que la mayoría de los OOM los problemas pueden ser resueltos rápidamente por simplemente volver a particionar los datos en lugares apropiados en su código (de nuevo vistazo a la Chispa de la interfaz de usuario para sugerencias en cuanto a donde puede ser necesario para una llamada a repartition). De lo contrario, puede que desean ampliar sus máquinas para satisfacer la necesidad de la memoria.

    • Yo tenía el mismo problema y repartition hizo el truco. Gracias
    • A menos que usted está jar de aplicación es de 150MB y tienes 200 ejecutores tratando de descargar desde la MAÑANA. Spark no es lo suficientemente inteligente como para el tratamiento de un activo jar descargar como un no-muerto nodo. Y el latido de su corazón pings son bloqueados por la descarga.
  2. 26

    La respuesta era bastante simple. En mi spark-defaults.conf me puse el spark.network.timeout a un valor más alto. Intervalo de latido era algo irrelevante para el problema (a pesar de que la afinación es muy útil).

    Cuando se utiliza spark-submit yo también era capaz de establecer el tiempo de espera de la siguiente manera:

    $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
    
    • Latidos dígale al conductor que el albacea está todavía vivo y actualizarlo con las métricas para el progreso de las tareas. chispa.ejecutor.heartbeatInterval debería ser significativamente menor que la chispa.red.tiempo de espera: spark.apache.org/docs/latest/configuration.html
    • esto no funciona para mí, tuve que usar –conf chispa.red.tiempo de espera=10000000
    • Con valores idénticos para spark.network.timeout y spark.executor.heartbeatInterval, he recibido el siguiente error java.lang.IllegalArgumentException: requirement failed: The value of spark.network.timeout=10000000s must be no less than the value of spark.executor.heartbeatInterval=10000000s. el Aumento de spark.network.timeout a 100000001 resuelto este. Sin embargo, la nota de @evgenii del comentario anterior referencia spark.apache.org/docs/latest/configuration.html
    • ¿sabes cómo establecer en Zeppelin?
    • Configuración de spark.network.timeout mayor voluntad de dar más tiempo a los ejecutores para volver a conductor y el informe de sus latidos. Mientras spark.executor.heartbeatInterval es el intervalo en el ejecutor de los informes de sus latidos para el conductor. Así que en caso de que el GC está tomando más tiempo en el ejecutor, a continuación, spark.network.timeout debe ayudar conductor esperando obtener respuesta de albacea antes de que sea marcado como perdido y empezar de nuevo. Consulte este – (github.com/rjagerman/mammoth/wiki/…)

Dejar respuesta

Please enter your comment!
Please enter your name here