Github user tdas commented on the pull request:

    https://github.com/apache/spark/pull/126#issuecomment-37485786
  
    @yaoshengzhe I agree using finalizer is not the most ideal thing in the 
world. However, the problem that we are dealing with here is that there is no 
clean and safe way to detect whether an RDD or a shuffle has gone out of scope, 
other than, using the garbage collection mechanisms. There already exists 
mechanisms like RDD.unpersist() to cleanup  persisted RDDs. That is, as long as 
the developer diligently keeps track of all RDDs and make sure to unpersist 
them while keeping track of dependencies. That's a pain, just like malloc and 
free. Similarly, for the shuffle data (map outputs), its hard to figure out 
when all the RDDs that depend on the shuffle data, so its hard to figure out 
when it is safe to clean up the shuffle data. Furthermore, if you consider RDD 
checkpointing, which transparently modifies the RDD DAG structure behind the 
scenes, its get even harder to keep track of RDDs and clean them. So the only 
safe way is to use Java garbage collection mechanism. 
    
    However, one can argue that one can implement this functionality without 
using finalizer() by using weak references and reference queues (reference 
queues keep track which objects got garbage collected). However, that requires 
all RDDs, etc. to be wrapped with WeakReference objects. That's much 
complicated and error-prone solution. Hence, I have used finalizer() for now. 
As @andrewor14 has already pointed out that I have taken care in making sure 
the finalizer() function is as cheap as possible (just a insert into a queue). 
And regarding what the article says about object initialization being long if 
finalize() function is define, I think it is an acceptable overhead (few ms) as 
RDDs are not created at the rate of 1000s per second.
    



---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to