【发布时间】:2012-07-12 14:20:55
【问题描述】:
当我的代码遇到未处理的异常时,我想自动终止我的所有 hadoop 作业。我想知道最好的做法是什么?
谢谢
【问题讨论】:
当我的代码遇到未处理的异常时,我想自动终止我的所有 hadoop 作业。我想知道最好的做法是什么?
谢谢
【问题讨论】:
根据版本,执行:
版本
杀死一个 hadoop 工作:
hadoop job -kill $jobId
您可以获得所有 jobId 正在做的事情的列表:
hadoop job -list
版本 >=2.3.0
杀死一个 hadoop 工作:
yarn application -kill $ApplicationId
您可以获得所有 ApplicationId 正在做的事情的列表:
yarn application -list
【讨论】:
不推荐使用以下命令
hadoop job -list
hadoop job -kill $jobId
考虑使用
mapred job -list
mapred job -kill $jobId
【讨论】:
运行list 以显示所有作业,然后在相应命令中使用jobID/applicationID。
杀死映射的作业:
mapred job -list
mapred job -kill <jobId>
杀死纱线工作:
yarn application -list
yarn application -kill <ApplicationId>
【讨论】:
一个未处理的异常(假设它像坏数据一样可重复,而不是从特定数据节点读取错误)最终会导致作业失败。
您可以通过以下属性配置特定 map 或 reduce 任务在整个作业失败之前可以失败的最大次数:
mapred.map.max.attempts - 每个地图任务的最大尝试次数。换句话说,框架会在放弃之前尝试多次执行地图任务。
mapred.reduce.max.attempts - 与上面相同,但用于减少任务如果您想在第一次失败时让作业失败,请将此值从默认值 4 设置为 1。
【讨论】:
只要强行杀掉进程ID,hadoop作业也会被自动杀掉。使用这个命令:
kill -9 <process_id>
例如:进程 ID 号:4040 名称节点
username@hostname:~$ kill -9 4040
【讨论】:
使用下面的命令杀死所有在纱线上运行的作业。
对于接受的作业,请使用以下命令。
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
【讨论】: