2016-05-12 8 views
0

Ich habe gerade angefangen, hadoop zu verwenden, und mir ist aufgefallen, dass lokale Jobverzeichnisse nicht gelöscht werden. Ich verwende hadoop 2.2.0 unter Windows.haddop/mapreduce lokale Jobverzeichnisse werden nicht gelöscht

Gibt es irgendeine Konfiguration, die benötigt wird, damit Hadoop die Bereinigung aller Verzeichnisse unter "/ tmp/hadoop- /mapred/local/" vornehmen kann?

Auch nach der Untersuchung und dem Blick in den Code fand ich, dass ein Teil der Logik in der Klasse "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); 
} 

Warum nicht einfach verwenden (wie es der Fall ist für systemJobFile):

localFs.delete (localJobFile.getParent(), true); // lösche lokale Kopie

Ist es richtig, das zu tun? Ich versuche es und sieht aus wie es das Problem behebt, aber ich bin mir nicht sicher.

Update: Ich habe gerade festgestellt, dass viele Verzeichnisse "attemypy_local ****" immer noch da sind. Nicht gelöscht von hadoop!

Vielen Dank.

Antwort

0

Da ich eine schnelle Lösung finden muss und ich nicht die Idee mag, ein Skript zu erstellen, um diese Verzeichnisse zu bereinigen, habe ich diesen Patch (org.apache.hadoop.mapred.LocalJobRunner): // Zeile: 114 privater Pfad 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); 
    } 

Ich habe nie gearbeitet mit hadoop vor und ich habe gerade angefangen mit in den letzten zwei Tagen zu spielen, so dass ich weiß nicht, ob meine Lösung wird keine Auswirkungen auf hadoop nicht hat. Leider ist dies die beste Lösung, die ich habe.

0

Es gibt einige Konfigurationsschlüssel wie

mapreduce.task.files.preserve.failedtasks 

in mapred Konfig.

Wie auch immer ... Standardmäßig sollte Hadoop das temporäre Jobverzeichnis löschen. Bei Erfolg werden die Dateien nach ${mapreduce.output.fileoutputformat.outputdir} verschoben. Wenn etwas schiefgelaufen ist, werden Dateien gelöscht. Also ich bin mir nicht sicher, diese Reparatur für real, was passiert auf Ihrer Installation.

Verwandte Themen