apache-spark - sources - spark streaming kafka
¿Cómo detengo un trabajo de chispa? (3)
Tengo un trabajo de Spark Streaming que se ha estado ejecutando continuamente. ¿Cómo detengo el trabajo con gracia? He leído las recomendaciones habituales de conectar un gancho de apagado en la supervisión del trabajo y enviar un SIGTERM al trabajo.
sys.ShutdownHookThread {
logger.info("Gracefully stopping Application...")
ssc.stop(stopSparkContext = true, stopGracefully = true)
logger.info("Application stopped gracefully")
}
Parece funcionar, pero no parece ser la forma más limpia de detener el trabajo. ¿Me estoy perdiendo de algo?
Desde la perspectiva del código, puede tener sentido, pero ¿cómo se usa en un entorno de clúster? Si iniciamos un trabajo de transmisión por chispa (distribuimos los trabajos en todos los nodos del clúster) tendremos que hacer un seguimiento del PID para el trabajo y el nodo en el que se estaba ejecutando. Finalmente, cuando tenemos que detener el proceso, debemos hacer un seguimiento del nodo en el que se estaba ejecutando el trabajo y el PID correspondiente. Solo esperaba que hubiera una forma más simple de control de trabajo para la transmisión de trabajos.
Ahora es oficial. Consulte aquí la documentación original de apache: spark.apache.org/docs/latest/configuration.html#spark-streaming
Puede detener su contexto de transmisión en modo de clúster ejecutando el siguiente comando sin necesidad de enviar un SIGTERM. Esto detendrá el contexto de transmisión sin que necesite detenerlo explícitamente utilizando un enganche de hilos.
$SPARK_HOME_DIR/bin/spark-submit --master $MASTER_REST_URL --kill $DRIVER_ID
- $ MASTER_REST_URL es el URL de reposo de la chispa, es decir, algo así como spark: // localhost: 6066
- $ DRIVER_ID es algo así como driver-20150915145601-0000
Si desea que la chispa pare su aplicación con gracia, puede intentar configurar las siguientes propiedades del sistema cuando la chispa se envíe inicialmente (consulte http://spark.apache.org/docs/latest/submitting-applications.html para configurar la configuración de chispa). propiedades).
spark.streaming.stopGracefullyOnShutdown=true
Esto no está oficialmente documentado, y lo reuní al mirar el código fuente 1.4. Esta bandera se honra en modo independiente. Todavía no lo he probado en modo agrupado.
Estoy trabajando con spark 1.4. *
Si todo lo que necesita es simplemente dejar de ejecutar la aplicación de transmisión, entonces la forma más simple es a través de la IU de administración de Spark (puede encontrar su URL en los registros de inicio de Spark master).
Hay una sección en la interfaz de usuario que muestra la ejecución de aplicaciones de transmisión y pequeños botones de URL (kill)
cerca de cada ID de aplicación.