java如何优雅地杀死hadoop作业/intercept`hadoop作业杀死`
我的Java应用程序在mapper上运行,并使用QuboleAPI创建子进程。应用程序存储子qubole查询ID。我需要截获终止信号并在退出前关闭子进程hadoop job -kill jobId
和yarn application -kill applicationId
命令正在以SIGKILL方式终止作业,我不知道如何拦截关机。是否有可能以某种方式拦截作业终止,或者配置hadoop以使应用程序有机会正常关闭
应用程序在本地运行时使用ShutdownHook
成功拦截关机,而不是在映射器容器中运行,并且能够终止其子进程
请建议在mapper中运行时如何拦截关机,或者我可能做错了什么
# 1 楼答案
SIGKILL是不可阻挡的,任何进程都无法捕捉到它。无论是Java应用程序还是JVM本身。。。事实上,它不是发送给流程的事件。将其视为对内核的直接命令,以无延迟地销毁所有进程资源。
从
man 7 signal
这是一个本机核心内核特性,您不能绕过它
还请注意,根据Prabhu(2015-07-15)关于how to kill hadoop jobs:
这在Apache Hadoop - Deprecated API Documentation上得到了验证
不幸的是,根据当前的^{} Command Documentation ,似乎无法控制为终止作业而发送的信号类型