Github user jiangxb1987 commented on the issue:

    https://github.com/apache/spark/pull/21698
  
    Thanks @cloud-fan your summary above is super useful, and I think it's 
clear enough.
    
    > So when we see fetch failure and rerun map tasks, we should track which 
reducers have its shuffle blocks being rewritten, and rerun them.
    
    IIUC, patterns like `rdd.map(...).groupBy()` shall always be under risk if 
we can generate non-determine output in `map()` right?
    
    > Simply inserting a sort before shuffle doesn't help. The fix for 
dataframe is adding a sort before round-robin, to make it deterministic. If we 
add the sort after round-robin and before shuffle, the problem still exists.
    
    Does this means, if we can generate non-determine output, then we can still 
loss some data even add a local sort before shuffle, because the reduce tasks 
may have already finished (or even have committed)?
    
    > be more conservative when handling fetch failure and rerun more reduce 
tasks. We can provide an internal API to tag a RDD as deterministic (very 
common in Spark SQL) and then we can safely be optimistic when handling fetch 
failure.
    
    This is somehow like what I proposed yesterday, one issue we can't resolve 
is that some ResultTasks may have committed, in that case it seems the best 
effort we can make is just fail the job.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to