org.apache.hadoop.io.compress.**GzipCodec
,此类中的GzipOutputStream
未关闭,因此内存泄漏。
spark版本是2.1.0,hadoop版本是2.8.4
sparkPairRdd.saveAsHadoopFile(outputPath, String.class, String.class, MultipleTextOutputFormat.class, GzipCodec.class);
最佳答案
如果我正确理解了GzipCodec
类,则其目的是创建各种压缩器和解压缩器流并将它们返回给调用者。它不负责关闭这些流。这是 call 者的责任。
您只需在对象上调用close()
。如果saveAsHadoopFile
使用GzipCodec
创建GzipOutputStream
,则该方法负责将其关闭。
与GzipOutputStream
相同。在上面调用close()
。
要显式关闭吗?
或者,您可以使用try资源来管理GzipCodec
创建的流。
但是,如果您要问是否有避免正确管理流的方法,那么答案是否定的。
如果实际上由于saveAsHadoopFile
没有关闭它打开的流而导致(您认为)存储泄漏,请提供一个我们可以查看的minimal reproducible example。这可能是Hadoop中的错误……或者您可能使用不正确。