haddop / mapreduce本地作业目录不会被删除

时间:2016-05-12 19:58:16

标签: hadoop

我刚刚开始使用hadoop,我注意到本地的作业目录没有被删除。 我在Windows上使用hadoop 2.2.0。

是否需要任何配置,以便hadoop可以清理“/ tmp / hadoop- / mapred / local / ”下的所有目录?

此外,在调查并查看代码后,我发现部分逻辑位于“org.apache.hadoop.mapred.LocalJobRunner”类中(hadoop-mapreduce-client-common-2.2.0)< / p>

try {
  fs.delete(systemJobFile.getParent(), true); // delete submit dir
  localFs.delete(localJobFile, true); // delete local copy
  // Cleanup distributed cache
  localDistributedCacheManager.close();
} catch (IOException e) {
  LOG.warn("Error cleaning up "+id+": "+e);
}

为什么不使用(因为它是systemJobFile的情况):

localFs.delete(localJobFile.getParent(),true); //删除本地副本

这样做是否正确? 我试着看起来像是在解决这个问题,但我不确定。

更新:我刚注意到很多目录&#34; attempty_local ****&#34;还在那里没有被hadoop删除!

谢谢。

2 个答案:

答案 0 :(得分:0)

由于我必须找到一个快速的解决方案而且我不想创建一个脚本来清理这些目录,我做了这个补丁(org.apache.hadoop.mapred.LocalJobRunner):     //行:114     private Path localCacheJobDir;

// line: 156
    this.localCacheJobDir = localFs.makeQualified(new Path(new Path(new Path(conf.getLocalPath(jobDir), user), JOBCACHE), jobid.toString()));

// line: 492
    try {
      fs.delete(systemJobFile.getParent(), true); // delete submit dir

      final Path localJobFilePath = localJobFile.getParent();
      localFs.delete(localJobFile, true); // delete local copy

      // Cleanup distributed cache
      localDistributedCacheManager.close();

      localFs.delete(localJobFilePath, true); // delete local copy

      localFs.delete(localCacheJobDir, true); // delete local copy
    } catch (IOException e) {
      LOG.warn("Error cleaning up "+id+": "+e);
    }

我之前从未和hadoop合作过,而且我刚开始玩这两天,所以我不知道我的解决方案是否会对hadoop产生任何影响。不幸的是,这是我的最佳解决方案。

答案 1 :(得分:0)

有一些配置键,如

mapreduce.task.files.preserve.failedtasks

在mapred配置中。

总之... 默认情况下,hadoop应清除临时作业目录。 成功后,文件将移至${mapreduce.output.fileoutputformat.outputdir} 如果出现问题,将删除文件。 因此,我不确定这是否能解决您的安装过程中出现的问题。