Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Exception 清除失败的映射_Exception_Hadoop_Mapreduce - Fatal编程技术网

Exception 清除失败的映射

Exception 清除失败的映射,exception,hadoop,mapreduce,Exception,Hadoop,Mapreduce,我的映射程序会将一些数据写入本地磁盘,并在映射程序完成后将其清除。但是,如果发生错误(发生异常),则不会调用cleanup()方法。 我可以在映射器中捕获异常,但无法处理映射器中未调用的异常(例如:作业跟踪器故障切换到备用节点) 当映射程序get失败时,有什么方法可以清除吗?您可以重写映射程序的run方法,在上下文中输入键的迭代中包含try/catch,并确保调用了cleanup: @Override public void run() { setup(context); try {

我的映射程序会将一些数据写入本地磁盘,并在映射程序完成后将其清除。但是,如果发生错误(发生异常),则不会调用cleanup()方法。 我可以在映射器中捕获异常,但无法处理映射器中未调用的异常(例如:作业跟踪器故障切换到备用节点)


当映射程序get失败时,有什么方法可以清除吗?

您可以重写映射程序的run方法,在上下文中输入键的迭代中包含try/catch,并确保调用了cleanup:

@Override
public void run() {
  setup(context);

  try {
    while (context.nextKeyValue()) {
      map(context.getCurrentKey(), context.getCurrentValue(), context);
    }
  } finally {
    cleanup(context);
  }
}
您需要确保清理方法中没有任何逻辑来尝试和输出记录,或者在映射器中设置一个标志来指示发生了错误


这可能无法防止所有类型的任务失败(例如JVM崩溃),我认为除了在原始作业之后运行作业外,您没有其他方法,其作用是确保正确清理使用的资源。

如果作业完成,使用作业类,您肯定可以删除一些文件夹,即使目录在本地文件系统中,也要使用filesystem


我不确定,您所知道的是临时文件的位置:它是在mapred.local.dir中指定的,因此删除这些文件应该是您的计划B。通常工作完成后会为您进行清理,但如果遇到问题,您可能必须手动执行。如果守护进程仍处于活动状态,您可以尝试格式化namenode。我的映射器将数据写入本地磁盘(实际上是RAMDisk),而不是HDFS。映射程序应该删除自己编写的文件。