如何终止Hadoop作业

63
我希望当我的代码遇到未处理的异常时,能够自动杀死所有的Hadoop作业。我想知道最佳实践是什么? 谢谢。
6个回答

126

根据版本执行以下操作:

版本 <2.3.0

终止一个 Hadoop 作业:

hadoop job -kill $jobId

您可以执行以下操作获取所有jobId的列表:

hadoop job -list

版本 >=2.3.0

终止一个Hadoop作业:

yarn application -kill $ApplicationId

您可以通过执行以下操作获取所有ApplicationId的列表:

yarn application -list

2
Also mapred job -kill $jobId - Pradeep Gollakota

18

使用以下命令已过时

hadoop job -list
hadoop job -kill $jobId

考虑使用

mapred job -list
mapred job -kill $jobId

1
无法工作并出现以下错误:Exception in thread "main" java.lang.IllegalArgumentException: JobId string : application_1470941878165_0001 格式不正确。 - tribbloid

17

运行 list 命令以显示所有作业,然后在适当的命令中使用 jobID/applicationID。

终止 mapred 作业:

mapred job -list
mapred job -kill <jobId>

终止Yarn任务:

yarn application -list
yarn application -kill <ApplicationId>

4

如果出现未处理的异常(假设它是可重复的,如来自特定数据节点的读取错误而非坏数据),最终作业将失败。

您可以通过以下属性配置特定映射或减少任务在整个作业失败之前可以失败的最大次数:

  • mapred.map.max.attempts - 每个映射任务的最大尝试次数。换句话说,框架将尝试执行这么多次映射任务,然后放弃它。
  • mapred.reduce.max.attempts - 与上述相同,但适用于减少任务

如果您想在第一次失败时使作业失败,请将此值从默认值4设置为1。


但是,如果一个节点死亡并且其任务失败,即使没有抛出异常,这也会导致作业失败,对吗?然而,我相信这确实是最接近 OP 想要的解决方案。 - vefthym

2

只需强制终止进程 ID,hadoop 作业也会自动终止。使用以下命令:

kill -9 <process_id> 

例如:进程 ID 号:4040 名称节点

username@hostname:~$ kill -9 4040

1

使用以下命令终止正在Yarn上运行的所有作业。

对于已接受的作业,请使用以下命令。

for x in $(yarn application -list -appStates ACCEPTED | awk 'NR > 2 { print $1 }'); do yarn application -kill $x; done

对于正在运行的作业,请使用以下命令。

for x in $(yarn application -list -appStates RUNNING | awk 'NR > 2 { print $1 }'); do yarn application -kill $x; done


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接