...
目前的处理方法就是till说的So far I'm not convinced that something would break if we simply return the InputSplits
to the InputSplitAssigner
.,但是这样在预测执行的情况下是不行的。
till有个建议就是We could, for example, add a new interface which needs to be implemented by an InputSplitAssigner
to support fine grained recovery. Otherwise, such a failure will result into a global failover.
...
有个人说 I think in most cases, it is ok the split on failed task taken over by other tasks and it is more friendly for failover.
But for some special cases, it is not ok, because the assigner can be customized, all of the assignment of input split should comes from the assigner implemented.
eg: when the assigner implemented to make sure each task processes the same number of input splits, we should not allow the input splits of failed task taken over by other task.
...
So, I will change,,不要再把inputsplit给return给assign了,而是,清空index,记录每个execution消费到list<InputSplit>里面的第几个index了,也就是记录下标,然后failover以后,就把下标清0,然后多个execution也可以玩得转,然后这里再画一张图,把这个过程说清楚。For implementation, we can record the input split assigned to the task on assigning, and this is the most general way
Code Block | ||||
---|---|---|---|---|
| ||||
public class ExecutionVertex
implements AccessExecutionVertex, Archiveable<ArchivedExecutionVertex> {
private final ArrayList<InputSplit> inputSplits;
private final Map<ExecutionAttemptID, Integer> inputSplitIndexMap;
}
|
Manage middle ResultPartition
...