我希望当我的代码遇到未处理的异常时,能够自动杀死所有的Hadoop作业。我想知道最佳实践是什么?
谢谢。
根据版本执行以下操作:
版本 <2.3.0
终止一个 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 作业:
mapred job -list
mapred job -kill <jobId>
终止Yarn任务:
yarn application -list
yarn application -kill <ApplicationId>
如果出现未处理的异常(假设它是可重复的,如来自特定数据节点的读取错误而非坏数据),最终作业将失败。
您可以通过以下属性配置特定映射或减少任务在整个作业失败之前可以失败的最大次数:
mapred.map.max.attempts
- 每个映射任务的最大尝试次数。换句话说,框架将尝试执行这么多次映射任务,然后放弃它。mapred.reduce.max.attempts
- 与上述相同,但适用于减少任务如果您想在第一次失败时使作业失败,请将此值从默认值4设置为1。
只需强制终止进程 ID,hadoop 作业也会自动终止。使用以下命令:
kill -9 <process_id>
例如:进程 ID 号:4040 名称节点
username@hostname:~$ kill -9 4040
使用以下命令终止正在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