如何终止 hadoop 作业 gracefully/intercept `hadoop job -kill`
How to kill hadoop job gracefully/intercept `hadoop job -kill`
我的 Java 应用程序在映射器上运行并使用 Qubole API 创建子进程。应用程序存储子 qubole queryID。我需要在退出前拦截终止信号并关闭子进程。 hadoop job -kill jobId
和 yarn application -kill applicationId
命令正在以 SIGKILL 方式杀死作业,我不知道如何拦截关机。是否有可能以某种方式拦截作业终止或配置 hadoop 以使应用程序有机会正常关闭?
应用程序在 运行 本地时使用 ShutdownHook
成功拦截关闭,而不是在映射器容器中并且能够终止它的子进程。
请建议如何在映射器中 运行 时拦截关机,或者我做错了什么?
SIGKILL 是不可阻挡的,没有进程可以捕获它。无论是您的 Java 应用程序,还是 JVM 本身……实际上,它都不是发送到进程的事件。将其更多地视为直接命令内核立即销毁所有进程资源。
来自man 7 signal
:
the signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.
这是本机核心内核功能,您无法绕过它。
另请注意,根据Prabhu (2015-07-15) on how to kill hadoop jobs:
Use of following command is depreciated
hadoop job -list
hadoop job -kill $jobId
consider using
mapred job -list
mapred job -kill $jobId
这已在 Apache Hadoop - Deprecated API Documentation
上验证
遗憾的是,根据当前 mapred
Command Documentation 看来您无法控制发送的终止作业的信号类型。
我的 Java 应用程序在映射器上运行并使用 Qubole API 创建子进程。应用程序存储子 qubole queryID。我需要在退出前拦截终止信号并关闭子进程。 hadoop job -kill jobId
和 yarn application -kill applicationId
命令正在以 SIGKILL 方式杀死作业,我不知道如何拦截关机。是否有可能以某种方式拦截作业终止或配置 hadoop 以使应用程序有机会正常关闭?
应用程序在 运行 本地时使用 ShutdownHook
成功拦截关闭,而不是在映射器容器中并且能够终止它的子进程。
请建议如何在映射器中 运行 时拦截关机,或者我做错了什么?
SIGKILL 是不可阻挡的,没有进程可以捕获它。无论是您的 Java 应用程序,还是 JVM 本身……实际上,它都不是发送到进程的事件。将其更多地视为直接命令内核立即销毁所有进程资源。
来自man 7 signal
:
the signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.
这是本机核心内核功能,您无法绕过它。
另请注意,根据Prabhu (2015-07-15) on how to kill hadoop jobs:
Use of following command is depreciated
hadoop job -list hadoop job -kill $jobId
consider using
mapred job -list mapred job -kill $jobId
这已在 Apache Hadoop - Deprecated API Documentation
上验证遗憾的是,根据当前 mapred
Command Documentation 看来您无法控制发送的终止作业的信号类型。