BufferedWriter导致内存超出异常

时间:2016-10-12 07:48:18

标签: java

我正在使用BufferedWriter将我的内容写入文件。 [实际上文件是HDFS。我正在通过reducer写作。]

FileSystem fs = FileSystem.get(new Configuration());
    Path path = new Path("temp.txt");       
    OutputStream os = fs.create(path);
    bufferedWriter = new BufferedWriter(new OutputStreamWriter(os));

这就是我创建BufferedWriter的方法。[减速器的SetUp方法。]

reduce方法中编写部分:

try {
        bufferedWriter.write(dt+ExporterConstants.MAP_OUTPUT_KEY_SEPERATOR+hdfsPath+ExporterConstants.MAP_OUTPUT_KEY_SEPERATOR+inputSplit+"\n");
    } catch (IOException e1) {
        e1.printStackTrace();
    }

我正在使用清理方法

关闭此方法

我的问题:

我收到container is running beyond physical memory limits. Current usage: 5.5 GB of 5.5 GB physical memory used; 8.7 GB of 11.5 GB virtual memory used这样的错误。所以我假设的是我正在缓冲所有数据并在关闭方法时只刷一次。

是否导致了这个问题? 我如何有效地冲洗?

我也愿意使用其他作家。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

听起来堆大小对于你给它的内存来说太大了。 JVM可以使用最大堆大小来尝试使程序运行得更快,而不仅仅是由于保留数据。

尝试减少JVM的内存消耗。如果你保留它所保留的数据太低,它将得到一个OutOfMemoryError。