Ngone51 commented on a change in pull request #23677: [SPARK-26755][SCHEDULER] 
: Optimize Spark Scheduler to dequeue speculative tasks…
URL: https://github.com/apache/spark/pull/23677#discussion_r303212366
 
 

 ##########
 File path: core/src/main/scala/org/apache/spark/scheduler/TaskSetManager.scala
 ##########
 @@ -143,25 +144,18 @@ private[spark] class TaskSetManager(
   // of failures.
   // Duplicates are handled in dequeueTaskFromList, which ensures that a
   // task hasn't already started running before launching it.
-  private val pendingTasksForExecutor = new HashMap[String, ArrayBuffer[Int]]
 
-  // Set of pending tasks for each host. Similar to pendingTasksForExecutor,
-  // but at host level.
-  private val pendingTasksForHost = new HashMap[String, ArrayBuffer[Int]]
-
-  // Set of pending tasks for each rack -- similar to the above.
-  private val pendingTasksForRack = new HashMap[String, ArrayBuffer[Int]]
-
-  // Set containing pending tasks with no locality preferences.
-  private[scheduler] var pendingTasksWithNoPrefs = new ArrayBuffer[Int]
-
-  // Set containing all pending tasks (also used as a stack, as above).
-  private val allPendingTasks = new ArrayBuffer[Int]
+  private[scheduler] val pendingTasks = new PendingTasksByLocality()
 
   // Tasks that can be speculated. Since these will be a small fraction of 
total
-  // tasks, we'll just hold them in a HashSet.
+  // tasks, we'll just hold them in a HashSet. The HashSet here ensures that 
we do not add
+  // duplicate speculative tasks.
   private[scheduler] val speculatableTasks = new HashSet[Int]
 
 Review comment:
   I see, now, this is only used to guard against submitting duplicate 
speculatable tasks, right ? But it used to dequeue tasks by traversing on it 
for several locality level. And this why it slows down the job when it is 
large. 
   
   But from the comment above, I think we have a default agreement previously 
that speculatable tasks should always be less in most cases(even for large 
taskset). And this maybe the reason why we don't classify it by location pref 
as non-speculatable tasks do.
   
   So, just out of curiosity, my question is, about how many speculatable tasks 
spawn out of the stage(e.g. 100000 partitions) ? And(assuming the cluster is 
healthy), why there's so many  speculatable tasks ? Do you have any specific 
configs ? I'm wondering that current speculation mechanism may have something 
wrong if nothing's abnormal in this case. 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

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

Reply via email to