Listar todos los archivos en el directorio hdfs

Listar todos los archivos en el directorio hdfs

Debido a algún error en un componente, los archivos en HDFS se acumularon y el número es enorme, es decir, 2123516. Quiero enumerar todos los archivos y quiero copiar su nombre en un archivo, pero cuando ejecuto el siguiente comando, aparece un error de espacio en el montón de Java. .

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)

¿Existe alguna otra forma de enumerar los archivos y cuánto espacio de almacenamiento dinámico se requiere para enumerar 2400000 archivos?

Respuesta1

Puede intentar aumentar el tamaño del montón de CLI configurando HADOOP_HEAPSIZEenv. variables, por ejemplo:

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

El número está en MB, así que tenga cuidado :)

La pregunta más importante es ¿qué vas a hacer con más de 2 millones de archivos en la consola? ¿No estás planeando redirigir la salida a alguna parte?

información relacionada