Einfache Antwort: können Sie nicht.
Lassen Sie mich erklären, warum. Wenn Sie einen Ordner löschen, entfernen Sie alle Verweise auf alle rekursiv darin enthaltenen Dateien. Die Metadaten zu diesen Dateien (Chunk-Speicherorte) bleiben im Namenscode erhalten.
Die Datenknoten speichern Datenblöcke, haben aber im Grunde keine Ahnung von den tatsächlichen Dateien, denen sie entsprechen. Obwohl Sie technisch alle Verweise auf einen Ordner aus dem namenode entfernen könnten (was den Ordner als gelöscht erscheinen lassen würde), würden die Daten immer noch auf den Datenknoten verbleiben, die nicht wissen könnten, dass die Daten "tot" sind.
Wenn Sie also einen Ordner löschen, müssen Sie zuerst den gesamten Speicher aus allen Datenabschnitten zurückfordern, die für alle Dateien über den gesamten Cluster verteilt sind. Dies kann viel Zeit in Anspruch nehmen, ist aber grundsätzlich unvermeidbar.
Sie könnten einfach Löschungen in einem Hintergrundthread verarbeiten. Obwohl dies nicht mit dem langwierigen Prozess helfen wird, würde dies diesen Prozess zumindest vor der Anwendung verbergen.
einen Versuch wert: https://stackoverflow.com/questions/34140344/how-to-delete-files-from-the-hdfs (Deaktivieren des Papierkorbs) –
@RC. Es lohnt sich, '-skipTrash' zu verwenden, wenn Sie sicher sind, dass die Daten dauerhaft gelöscht werden sollen. Die Auswirkungen werden jedoch höchstwahrscheinlich marginal sein (falls vorhanden). Die Option ist hauptsächlich nützlich für Verzeichnisse, die über Quoten verfügen. Die Papierkorboperation wird als einfache Metadatenoperation implementiert, die unabhängig von der Anzahl der Dateien im Verzeichnis oder der Größe der einzelnen Dateien schnell abgeschlossen wird. – Pierre
@RC Papierkorb ist bereits mit Null-Intervall deaktiviert –