org.apache.hadoop.io.compress.gzipcodec,在这个类中gzipoutputstream没有关闭,所以内存泄漏

r1zk6ea1  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(412)

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);
ctehm74n

ctehm74n1#

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

相关问题