我有一个处理日志文件并报告一些统计信息的Hadoop作业。这项工作在工作的一半时间就死了,因为它没有文件句柄。我已经修复了文件句柄的问题,我想知道是否可以重新启动" kill"工作
答案 0 :(得分:4)
事实证明,没有一个好方法可以做到这一点;一旦工作被杀死,就无法重新实例化该工作并在第一次失败之前立即重新开始处理。可能有一些非常好的理由,但我没有资格谈论这个问题。
就我自己而言,我正在处理大量日志文件并将这些文件加载到索引中。另外,我正在同时创建一个关于这些文件内容的报告。为了使作业能够更好地容忍索引端的失败(副作用,这根本与Hadoop无关),我改变了我的工作,而是创建了许多较小的作业,这些作业中的每一个都处理了一大块这些日志文件。当其中一个作业完成时,它会重命名已处理的日志文件,以便不再处理它们。每个作业在运行之前等待上一个作业完成。
当一个作业失败时,之后的所有后续作业都会很快失败。简单地解决问题所在,重新提交我的工作将大致从中断处理。在最糟糕的情况下,一项工作在失败时完成了99%,那一项工作将被错误地和浪费地重新处理。