lef*_*oin 6 java hadoop mapreduce qubole
我的Java应用程序在mapper上运行,并使用Qubole API创建子进程.应用程序存储子qubole queryIDs.我需要在退出之前拦截kill信号并关闭子进程.hadoop job -kill jobId和yarn application -kill applicationId命令以SIGKILL方式查杀,我不知道如何拦截关机.是否有可能以某种方式拦截作业终止或配置hadoop以给予应用程序机会优雅地关闭?
应用程序在本地运行时使用ShutdownHook成功拦截关闭,而不是在映射器容器中并且能够杀死它的子进程.
请建议如何在mapper中运行时拦截关机,或者我做错了什么?
SIGKILL 是不可阻挡的,任何进程都无法捕获它。无论是您的 Java 应用程序,还是 JVM 本身……事实上,它都不是发送到进程的事件。更多地将其视为对内核的直接命令,立即销毁所有进程资源。
从man 7 signal:
信号 SIGKILL 和 SIGSTOP 无法被捕获、阻止或忽略。
这是本机核心内核功能,您无法绕过它。
另请注意,根据Prabhu (2015-07-15)关于如何终止 hadoop jobs 的说法:
不推荐使用以下命令
Run Code Online (Sandbox Code Playgroud)hadoop job -list hadoop job -kill $jobId考虑使用
Run Code Online (Sandbox Code Playgroud)mapred job -list mapred job -kill $jobId
这已在Apache Hadoop 上得到验证 - 已弃用的 API 文档
不幸的是,根据当前的mapred命令文档,您似乎无法控制发送来终止作业的信号类型。
| 归档时间: |
|
| 查看次数: |
1090 次 |
| 最近记录: |