2011-12-27 38 views
0

RunningJob有几种方法,抛出IOException(大概当连接到Hadoop失败?)我现在看的是isComplete()Hadoop:处理异常RunningJob.isComplete()

处理这种错误的正确方法是什么?我应该假设这个工作已经死了吗?我应该再等一等吗?简单地让我的应用程序在这一点上死去不是一种选择,因为它在Hadoop和其他地方管理大量作业,并且它需要尽可能健壮。

回答

1

我的回答有点太长了评论,所以我很抱歉我没有直接回答你的问题。我主要是从我的回应经验中谈起。

如果一个异常被抛到这个级别,你几乎可以认为这个工作将会消失。我发现只是再次尝试或尝试自动解决问题以响应抛出的异常是徒劳的。有太多可能会出错的地方。

通常,当通常运行正常的作业失败时,系统中会发生某些不良情况需要修复。 NameNode可能已经死了,也许这个开关变得笨手笨脚,谁知道。不幸的是,这些问题需要人们关注。

在我看来,开发工作最好花在构建某种警报基础设施(通常是电子邮件)上,让您在工作失败后立即知道......而不是考虑大量的案例。

一旦发现与群集和作业有关的一些常见问题,您就可以开始在应用程序中构建异常处理。我认为不值得花时间来预先考虑所有事情。

+0

这是一个相当古老的话题,但是对于记录来说,作业提交之后和实际开始执行之前,isComplete()调用也可能会引发异常。在这种情况下,例外并不意味着工作会失败。您需要查看isComplete()的源代码以了解它们如何处理这种情况。 – PNS 2013-06-04 17:03:02