[
https://issues.apache.org/jira/browse/MAPREDUCE-7306?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Xiaomin Zhang updated MAPREDUCE-7306:
-
Description:
MAPREDUCE-4371 added cyclic dependency check for a topologic sorted Job DAG.
However it is somehow not properly implemented for the `sort` phase.
In the while loop as below:
{code:java}
while (!SourceSet.isEmpty()) {
ControlledJob controlledJob = SourceSet.iterator().next();
SourceSet.remove(controlledJob);
if (controlledJob.getDependentJobs() != null) {
for (int i = 0; i < controlledJob.getDependentJobs().size(); i++) {
ControlledJob depenControlledJob =
controlledJob.getDependentJobs().get(i);
processedMap.get(controlledJob).add(depenControlledJob);
if (!hasInComingEdge(controlledJob, jobList, processedMap)) {
SourceSet.add(depenControlledJob);
}
}
}
}{code}
visit the parent node followed by the child node. If the given graph contains a
cycle, then there is at least one node which is a parent as well as a child so
this will break Topological Order. Therefore, after the topological sort, check
for every directed edge whether it follows the order or not.
was:
MAPREDUCE-4371 added cyclic dependency check for a topologic sorted Job DAG.
However it is somehow not properly implemented for the `sort` phase.
In the while loop as below:
{code:java}
// code placeholder
{code}
visit the parent node followed by the child node. If the given graph contains a
cycle, then there is at least one node which is a parent as well as a child so
this will break Topological Order. Therefore, after the topological sort, check
for every directed edge whether it follows the order or not.
> Mistaken cyclic check in JobControl Job DAG
> ---
>
> Key: MAPREDUCE-7306
> URL: https://issues.apache.org/jira/browse/MAPREDUCE-7306
> Project: Hadoop Map/Reduce
> Issue Type: Bug
> Components: client, mrv2
>Affects Versions: 3.0.0
>Reporter: Xiaomin Zhang
>Priority: Major
>
> MAPREDUCE-4371 added cyclic dependency check for a topologic sorted Job DAG.
> However it is somehow not properly implemented for the `sort` phase.
> In the while loop as below:
> {code:java}
> while (!SourceSet.isEmpty()) {
>ControlledJob controlledJob = SourceSet.iterator().next();
>SourceSet.remove(controlledJob);
>if (controlledJob.getDependentJobs() != null) {
> for (int i = 0; i < controlledJob.getDependentJobs().size(); i++) {
>ControlledJob depenControlledJob =
> controlledJob.getDependentJobs().get(i);
>processedMap.get(controlledJob).add(depenControlledJob);
>if (!hasInComingEdge(controlledJob, jobList, processedMap)) {
> SourceSet.add(depenControlledJob);
>}
> }
>}
> }{code}
> visit the parent node followed by the child node. If the given graph contains
> a cycle, then there is at least one node which is a parent as well as a child
> so this will break Topological Order. Therefore, after the topological sort,
> check for every directed edge whether it follows the order or not.
>
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
-
To unsubscribe, e-mail: mapreduce-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: mapreduce-issues-h...@hadoop.apache.org