Alle Dateien im HDFS-Verzeichnis auflisten

Alle Dateien im HDFS-Verzeichnis auflisten

Aufgrund eines Fehlers in einer Komponente haben sich Dateien in HDFS angesammelt und die Anzahl ist enorm, z. B. 2123516. Ich möchte alle Dateien auflisten und ihre Namen in eine Datei kopieren, aber wenn ich den folgenden Befehl ausführe, tritt ein Java-Heapspeicherfehler auf.

hdfs dfs -ls /tmp/content/

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:3332)
    at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:137)
    at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:121)
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:421)
    at java.lang.StringBuffer.append(StringBuffer.java:272)
    at java.net.URI.appendSchemeSpecificPart(URI.java:1911)
    at java.net.URI.toString(URI.java:1941)
    at java.net.URI.<init>(URI.java:742)
    at org.apache.hadoop.fs.Path.initialize(Path.java:145)
    at org.apache.hadoop.fs.Path.<init>(Path.java:126)
    at org.apache.hadoop.fs.Path.<init>(Path.java:50)
    at org.apache.hadoop.hdfs.protocol.HdfsFileStatus.getFullPath(HdfsFileStatus.java:215)
    at org.apache.hadoop.hdfs.DistributedFileSystem.makeQualified(DistributedFileSystem.java:252)
    at org.apache.hadoop.hdfs.DistributedFileSystem.listStatus(DistributedFileSystem.java:311)
    at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:842)
    at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:902)
    at org.apache.hadoop.fs.FileSystem.globStatusInternal(FileSystem.java:1032)
    at org.apache.hadoop.fs.FileSystem.globStatus(FileSystem.java:987)
    at org.apache.hadoop.fs.FileSystem.globStatus(FileSystem.java:965)
    at org.apache.hadoop.fs.shell.Command.runAll(Command.java:62)
    at org.apache.hadoop.fs.FsShell.run(FsShell.java:1822)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79)
    at org.apache.hadoop.fs.FsShell.main(FsShell.java:1895)

Gibt es eine andere Möglichkeit, die Dateien aufzulisten, und wie viel Heap-Speicherplatz wird zum Auflisten von 2.400.000 Dateien benötigt?

Antwort1

Sie können versuchen, die CLI-Heapgröße zu erhöhen, indem Sie HADOOP_HEAPSIZEdie Umgebungsvariable festlegen, zum Beispiel:

$ HADOOP_HEAPSIZE=1000 hdfs dfs -ls /tmp/content

Die Zahl ist in MB, also seien Sie einfach vorsichtig :)

Die größere Frage ist, was Sie mit über 2 Millionen Dateien auf der Konsole machen werden. Planen Sie nicht, die Ausgabe irgendwohin umzuleiten?

verwandte Informationen