清除失败的Map

hmtdttj4  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(371)

我的Map程序会将一些数据写入本地磁盘,并在Map程序完成时进行清理。但是,如果发生错误(发生异常),则不会调用cleanup()方法。我可以在Map器中捕获异常,但无法处理Map器中未调用的异常(例如:job tracker故障转移到备用节点)。
有什么方法可以在mapper get失败时进行清理吗?

svmlkihl

svmlkihl1#

您可以重写mapper的run方法,以便在上下文中输入键的迭代周围包含try/catch,并确保调用cleanup:

  1. @Override
  2. public void run() {
  3. setup(context);
  4. try {
  5. while (context.nextKeyValue()) {
  6. map(context.getCurrentKey(), context.getCurrentValue(), context);
  7. }
  8. } finally {
  9. cleanup(context);
  10. }
  11. }

您需要确保清除方法中没有任何逻辑来尝试输出记录,或者在Map器中设置一个标志来指示发生了错误。
这可能无法防止所有类型的任务失败(例如jvm崩溃),对于这种情况,我认为除了在原始作业之后运行一个作业(其作用是确保正确清理使用的资源)之外,没有其他方法。

展开查看全部
taor4pac

taor4pac2#

如果作业完成,使用job类可以删除一些文件夹,即使目录在本地文件系统中,也可以使用filesystem类
关于hadoop中文件系统的更多信息

相关问题