java - Comment tuer le travail de hadoop gracieusement/intercepter `hadoop job-kill`



mapreduce qubole (1)

SIGKILL est imparable et aucun processus ne peut l'attraper. Ni votre application Java, ni la JVM elle-même ... En fait, ce n'est pas un événement envoyé au processus. Considérez cela comme un ordre direct au noyau pour détruire toutes les ressources du processus sans délai.

De l' man 7 signal :

les signaux SIGKILL et SIGSTOP ne peuvent pas être interceptés, bloqués ou ignorés.

C'est une fonctionnalité natif du noyau natif, vous ne pouvez pas le contourner.

Notez également que selon Prabhu (2015-07-15) sur la façon de tuer des emplois hadoop :

L'utilisation de la commande suivante est dépréciée

hadoop job -list
hadoop job -kill $jobId

envisager d'utiliser

mapred job -list
mapred job -kill $jobId

Ceci est vérifié sur Apache Hadoop - Documentation API désapprouvée

Malheureusement, selon la documentation de commande mapred actuelle, il ne semble pas que vous puissiez contrôler le type de signal envoyé pour terminer un travail.

Mon application Java s'exécute sur le mappeur et crée des processus enfants à l'aide de l'API Qubole. L'application stocke les ID de requête qubole enfant. J'ai besoin d'intercepter le signal d'arrêt et d'arrêter les processus enfants avant de quitter. hadoop job -kill jobId et l' yarn application -kill applicationId commandes sont tuer le travail d'une manière SIGKILL, je ne sais pas comment intercepter l'arrêt. Est-il possible d'intercepter un job kill ou de configurer hadoop pour donner une chance à l'application de s'arrêter correctement?

L'application intercepte avec succès ShutdownHook lors de l'exécution locale, pas dans le conteneur mapper et capable de tuer ses processus enfants.

S'il vous plaît suggérer comment intercepter l'arrêt en cours d'exécution dans mapper, ou peut-être que je fais quelque chose de mal?





qubole