Hadoop
列出 hdfs 目錄下的所有文件
由於某個組件的一些錯誤,HDFS 中的文件累積並且數量巨大,即 2123516。我想列出所有文件並將它們的名稱複製到一個文件中,但是當我執行以下命令時,它會給出 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)
有沒有其他方法可以列出文件以及列出 2400000 個文件需要多少堆空間?
HADOOP_HEAPSIZE
您可以嘗試通過設置env來增加 CLI 堆大小。變數,例如:$ HADOOP_HEAPSIZE=1000 hdfs dfs -ls /tmp/content
數字以 MB 為單位,所以要溫柔:)
更大的問題是您將如何處理控制台上超過 2M 的文件?您不打算將輸出重定向到某個地方嗎?