如何优雅地杀死hadoop作业/intercept`hadoop job-kill`

qlvxas9a  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(432)

我的java应用程序在mapper上运行,并使用quboleapi创建子进程。应用程序存储子查询ID。我需要截获kill信号并在退出前关闭子进程。 hadoop job -kill jobId 以及 yarn application -kill applicationId 命令是以sigkill方式杀死job的,我不知道如何拦截关机。有没有可能以某种方式截获job kill,或者配置hadoop让应用程序有机会正常关闭?
应用程序使用成功截获关机 ShutdownHook 在本地运行时,不在Map器容器中,并且能够终止其子进程。
请建议如何截获关机时,运行在Map,或者我可能做了一些错误的事情?

cuxqih21

cuxqih211#

sigkill是不可阻挡的,任何进程都无法抓住它。无论是java应用程序还是jvm本身。。。事实上,它不是发送到进程的事件。把它看作是直接命令内核立即销毁所有进程资源。
man 7 signal :
sigkill和sigstop信号不能被捕获、阻止或忽略。
这是一个本机核心内核特性,您不能绕过它。
另请注意,根据prabhu(2015-07-15)关于如何杀死hadoop作业的内容:
以下命令的使用已折旧

hadoop job -list
hadoop job -kill $jobId

考虑使用

mapred job -list
mapred job -kill $jobId

这在ApacheHadoop不推荐使用的api文档中得到了验证
不幸的是,根据目前的情况 mapred 命令文档您似乎无法控制为终止作业而发送的信号类型。

相关问题