57

当我的代码遇到未处理的异常时,我想自动终止我所有的 hadoop 作业。我想知道最好的做法是什么?

谢谢

4

6 回答 6

121

根据版本,执行:

版本 <2.3.0

杀死一个 hadoop 工作:

hadoop job -kill $jobId

您可以获得所有 jobId 正在执行的操作的列表:

hadoop job -list

版本 >=2.3.0

杀死一个 hadoop 工作:

yarn application -kill $ApplicationId

您可以获得所有 ApplicationId 正在执行的操作的列表:

yarn application -list
于 2014-02-13T08:43:15.607 回答
18

使用以下命令已贬值

hadoop job -list
hadoop job -kill $jobId

考虑使用

mapred job -list
mapred job -kill $jobId
于 2015-07-15T22:09:22.037 回答
17

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

杀死映射的工作:

mapred job -list
mapred job -kill <jobId>

杀死纱线工作:

yarn application -list
yarn application -kill <ApplicationId>
于 2016-10-14T09:16:05.383 回答
4

未处理的异常(假设它像坏数据一样可重复,而不是从特定数据节点读取错误)最终会导致作业失败。

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

  • mapred.map.max.attempts-每个地图任务的最大尝试次数。换句话说,框架会在放弃之前尝试多次执行地图任务。
  • mapred.reduce.max.attempts- 同上,但用于减少任务

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

于 2012-07-12T20:44:34.703 回答
2

只要强行杀死进程ID,hadoop作业也会被自动杀死。使用这个命令:

kill -9 <process_id> 

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

username@hostname:~$ kill -9 4040
于 2015-01-29T02:16:14.920 回答
1

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

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

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

于 2020-08-03T17:16:33.410 回答