java hadoop mapreduce qubole

java - Cómo matar el trabajo de hadoop con gracia/interceptar `hadoop job-kill`



mapreduce qubole (1)

Mi aplicación Java se ejecuta en el asignador y crea procesos secundarios con Qubole API. La aplicación almacena identidades de consulta qubole hijo. Necesito interceptar la señal de matar y cerrar procesos secundarios antes de salir. hadoop job -kill jobId y yarn application -kill applicationId comandos están matando trabajo de una manera SIGKILL, no sé cómo interceptar el cierre. ¿Es posible interceptar el trabajo matado de alguna manera o configurar hadoop para dar la oportunidad de la aplicación para apagar con gracia?

La aplicación intercepta con éxito el apagado utilizando ShutdownHook cuando se ejecuta localmente, no en el contenedor del mapeador y puede matar sus procesos secundarios.

Sugiera cómo interceptar el apagado cuando se ejecuta en mapper, o tal vez estoy haciendo algo mal?


SIGKILL es imparable y ningún proceso puede atraparlo. Ni su aplicación Java ni la propia JVM ... En realidad, no es un evento enviado al proceso. Considérelo más como una orden directa al núcleo para destruir todos los recursos del proceso sin demora.

De man 7 signal :

las señales SIGKILL y SIGSTOP no se pueden capturar, bloquear ni ignorar.

Esta es una característica del kernel central nativa, no puede omitirla.

También tenga en cuenta que, según Prabhu (2015-07-15) sobre cómo matar los trabajos de hadoop :

El uso del siguiente comando se deprecia

hadoop job -list hadoop job -kill $jobId

Considere usar

mapred job -list mapred job -kill $jobId

Esto se verifica en Apache Hadoop - Documentación de API obsoleta

Desafortunadamente, de acuerdo con la documentación de comandos actualmente mapred , no parece que pueda controlar el tipo de señal enviada para terminar un trabajo.