我正在使用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
这样的错误。所以我假设的是我正在缓冲所有数据并在关闭方法时只刷一次。
是否导致了这个问题? 我如何有效地冲洗?
我也愿意使用其他作家。有什么建议吗?
答案 0 :(得分:0)
听起来堆大小对于你给它的内存来说太大了。 JVM可以使用最大堆大小来尝试使程序运行得更快,而不仅仅是由于保留数据。
尝试减少JVM的内存消耗。如果你保留它所保留的数据太低,它将得到一个OutOfMemoryError。