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中的错误……或者您可能使用不正确。

10-07 16:12