如何在Hadoop 2中从Mapper中杀死正在运行的Job(想要:引用运行的Job对象)

时间:2017-01-09 20:36:15

标签: java hadoop yarn hadoop2

几个stackoverflow条目已经解决了这个问题,但似乎没有任何东西可以解决这个问题。我想要逻辑,即使一个节点上的一个任务失败,我也会在完成之前终止整个作业。一个好的策略似乎是获取对正在运行的作业的引用,然后从失败的特定Mapper.map()调用中调用job.killJob()。这似乎比编写YarnClient并以此方式终止工作要容易得多。而且,比起以某种方式从驱动程序类获取作业引用,检查是否有任何任务失败,并且如果为true则调用job.killJob()更容易。

[1]建议采用一种杀人方法:How to abort a MR job inside a mapper (or a reducer)

但正如一位读者所评论的那样,在Hadoop 2中似乎无法从JobID获取对正在运行的作业的引用。另一种方法是调用new Job(context.getConfiguration())。killJob()。但这会有效吗?我想要一个实例来运行正在运行的作业,而不是一个新的Job实例。如果这个新的Job对象实例仍然指向现有的正在运行的作业,那么这可能有效。那是这样吗?

其他页面(例如How can Hadoop job kill by itself)建议从Mapper代码中抛出异常。但这似乎不会强制快速关闭应用程序,并且无论如何可能只关闭特定节点上的执行。

0 个答案:

没有答案