Java Hadoop copyFromLocal的内存不足问题

Java Hadoop copyFromLocal的内存不足问题,java,hadoop,copy,out-of-memory,heap,Java,Hadoop,Copy,Out Of Memory,Heap,我试图将包含1048578个文件的目录复制到hdfs文件系统中,但出现以下错误: Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:2367) at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130)

我试图将包含1048578个文件的目录复制到
hdfs
文件系统中,但出现以下错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2367)
    at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130)
    at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114)
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:415)
    at java.lang.StringBuffer.append(StringBuffer.java:237)
    at java.net.URI.appendSchemeSpecificPart(URI.java:1892)
    at java.net.URI.toString(URI.java:1922)
    at java.net.URI.<init>(URI.java:749)
    at org.apache.hadoop.fs.shell.PathData.stringToUri(PathData.java:565)
    at org.apache.hadoop.fs.shell.PathData.<init>(PathData.java:151)
    at org.apache.hadoop.fs.shell.PathData.getDirectoryContents(PathData.java:273)
    at org.apache.hadoop.fs.shell.Command.recursePath(Command.java:347)
    at org.apache.hadoop.fs.shell.CommandWithDestination.recursePath(CommandWithDestination.java:291)
    at org.apache.hadoop.fs.shell.Command.processPaths(Command.java:308)
    at org.apache.hadoop.fs.shell.Command.processPathArgument(Command.java:278)
    at org.apache.hadoop.fs.shell.CommandWithDestination.processPathArgument(CommandWithDestination.java:243)
    at org.apache.hadoop.fs.shell.Command.processArgument(Command.java:260)
    at org.apache.hadoop.fs.shell.Command.processArguments(Command.java:244)
    at org.apache.hadoop.fs.shell.CommandWithDestination.processArguments(CommandWithDestination.java:220)
    at org.apache.hadoop.fs.shell.CopyCommands$Put.processArguments(CopyCommands.java:267)
    at org.apache.hadoop.fs.shell.Command.processRawArguments(Command.java:190)
    at org.apache.hadoop.fs.shell.Command.run(Command.java:154)
    at org.apache.hadoop.fs.FsShell.run(FsShell.java:287)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
    at org.apache.hadoop.fs.FsShell.main(FsShell.java:340)
线程“main”java.lang.OutOfMemoryError中的异常:java堆空间 位于java.util.Arrays.copyOf(Arrays.java:2367) 位于java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130) 位于java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114) 位于java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:415) 位于java.lang.StringBuffer.append(StringBuffer.java:237) 位于java.net.URI.appendSchemeSpecificPart(URI.java:1892) 位于java.net.URI.toString(URI.java:1922) 位于java.net.URI。(URI.java:749) 位于org.apache.hadoop.fs.shell.PathData.stringToUri(PathData.java:565) 在org.apache.hadoop.fs.shell.PathData上(PathData.java:151) 位于org.apache.hadoop.fs.shell.PathData.getDirectoryContents(PathData.java:273) 位于org.apache.hadoop.fs.shell.Command.recursePath(Command.java:347) 位于org.apache.hadoop.fs.shell.CommandWithDestination.recursePath(CommandWithDestination.java:291) 位于org.apache.hadoop.fs.shell.Command.ProcessPath(Command.java:308) 位于org.apache.hadoop.fs.shell.Command.processPathArgument(Command.java:278) 位于org.apache.hadoop.fs.shell.CommandWithDestination.processPathArgument(CommandWithDestination.java:243) 位于org.apache.hadoop.fs.shell.Command.processArgument(Command.java:260) 位于org.apache.hadoop.fs.shell.Command.processArguments(Command.java:244) 位于org.apache.hadoop.fs.shell.CommandWithDestination.processArguments(CommandWithDestination.java:220) 位于org.apache.hadoop.fs.shell.CopyCommands$Put.processArguments(CopyCommands.java:267) 位于org.apache.hadoop.fs.shell.Command.processRawArguments(Command.java:190) 位于org.apache.hadoop.fs.shell.Command.run(Command.java:154) 位于org.apache.hadoop.fs.FsShell.run(FsShell.java:287) 位于org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 位于org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84) 位于org.apache.hadoop.fs.FsShell.main(FsShell.java:340) 尝试给put(或从本地复制)命令更多堆空间。 或者,执行不太激进的put操作

即,以半份或1/4份或1/5份分批复制。。。。在总数据中。 所有这些复制都是使用默认的java命令从本地计算机完成的,您只是在重载它。

尝试为put(或从本地复制)命令提供更多堆空间。 或者,执行不太激进的put操作

即,以半份或1/4份或1/5份分批复制。。。。在总数据中。
所有这些复制都是使用默认的java命令从本地机器上完成的,您只是在重载它。

问题基本上是Hadoop客户端的问题。这是通过将“GCOverdeLimit”增加到4GB来解决的。下面的命令解决了我的问题


export HADOOP_CLIENT_OPTS=“-XX:-usegccoverdelimit-Xmx4096m”

问题基本上与HADOOP CLIENT有关。这是通过将“GCOverdeLimit”增加到4GB来解决的。下面的命令解决了我的问题

export HADOOP_CLIENT_OPTS=“-XX:-usegcoveredlimit-Xmx4096m”