org.apache.hadoop.io.compress.**GzipCodec
,在这个班上 GzipOutputStream
没有关闭,所以内存泄漏。
如何关闭 GzipOutputStream
? 或者其他流也应该关闭?有好的选择吗?
spark版本是2.1.0,hadoop版本是2.8.4
sparkPairRdd.saveAsHadoopFile(outputPath, String.class, String.class, MultipleTextOutputFormat.class, GzipCodec.class);
1条答案
按热度按时间ctehm74n1#
如果我理解
GzipCodec
类,其目的是创建各种压缩器和解压缩器流并将它们返回给调用者。它不负责关闭这些流。这是来电者的责任。如何关闭
GzipOutputStream
?你只要打个电话
close()
在物体上。如果saveAsHadoopFile
正在使用GzipCodec
创建GzipOutputStream
,则该方法负责关闭它。或者其他流也应该关闭?
与a相同
GzipOutputStream
. 呼叫close()
在上面。有好的选择吗?
显式调用close?
或者,您可以管理由创建的流
GzipCodec
对资源使用try。但是如果你问是否有办法避免正确管理流,那么答案是否定的。
如果您确实遇到存储泄漏(您认为)是由于
saveAsHadoopFile
不要关闭它打开的流,请提供一个最小的可复制的例子,我们可以看看。可能是hadoop中的一个bug。。。或者你可能用错了。