2016-05-12 84 views
0

我剛開始使用hadoop,我發現本地作業目錄不會被刪除。 我在Windows上使用hadoop 2.2.0。haddop/mapreduce本地作業目錄不被刪除

是否需要配置,以便hadoop可以清理「/ tmp/hadoop-/mapred/local/」下的所有目錄?我發現部分邏輯是在類「org.apache.hadoop.mapred.LocalJobRunner」(hadoop-mapreduce-client-common-2.2.0)中,

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的情況下):()localJobFile.getParent(,真)

localFs.delete; //刪除本地副本

這樣做是否正確? 我試試看,它看起來像修復了這個問題,但我不確定。

更新:我只注意到很多目錄「attempy_local ****」仍然存在。不被hadoop刪除!

謝謝。

回答

0

由於我必須找到一個快速解決方案,我不想創建一個腳本來清理這些目錄,我做了這個補丁(org.apache.hadoop.mapred.LocalJobRunner): //行:114 私人路徑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的任何影響,我不知道。不幸的是,這是我擁有的最佳解決方案。

0

有喜歡

mapreduce.task.files.preserve.failedtasks 
在mapred配置

一些配置項。

無論如何... 默認情況下,hadoop應該清除臨時工作目錄。 成功時文件被移動到${mapreduce.output.fileoutputformat.outputdir} 如果事情出錯了,文件被刪除。 所以我不確定這個修復是否真正發生在你的安裝上。