spark rdd.saveashadoopfile非常浪费,因为它在每次写入时都会生成一个新的sparkhadoopwriter。我们有一个备份spark作业的用例,因为这些writer上的gc无法跟上传入流。
有没有人重新实现了这个方法,其中sparkhadoopwriter是根据写目标是哪个bucket重用的。如果我朝这个方向走,有没有什么架构上的原因可以解释为什么这个努力会失败?
spark rdd.saveashadoopfile非常浪费,因为它在每次写入时都会生成一个新的sparkhadoopwriter。我们有一个备份spark作业的用例,因为这些writer上的gc无法跟上传入流。
有没有人重新实现了这个方法,其中sparkhadoopwriter是根据写目标是哪个bucket重用的。如果我朝这个方向走,有没有什么架构上的原因可以解释为什么这个努力会失败?
1条答案
按热度按时间kmb7vmvb1#
RDD.saveAsHadoopFile
在执行器上执行,如果我们想重用SparkHadoopWriter
,那么我们可能需要在每次执行器执行作业时执行序列化和反序列化。尽管在体系结构上,您可以重新编写spark核心代码,也可以进行扩展
RDD
以及PairRDDFunctions
并添加序列化/反序列化代码并重用SparkHadoopWriter
但在我看来,这可能会增加更多的开销,因为你需要序列化或反序列化。虽然不确定您的用例,但通常(尽管有例外)最好有没有序列化的独立代码单元(除非需要),以便它创建对象,并在作业完成后立即销毁对象。但是如果需要,我们可以调整jvm来处理对象的创建/删除。