[ 
https://issues.apache.org/jira/browse/SPARK-17522?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sun Rui updated SPARK-17522:
----------------------------
    Description: 
The MesosCoarseGrainedSchedulerBackend launch executors in a round-robin way 
among accepted offers that are received at once, but it is observed that 
typically executors are launched on a small number of slaves.

It is found that MesosCoarseGrainedSchedulerBackend mostly is receiving only 
one offer once on a cluster composed of many nodes, so that the round-robin 
assignment of executors among offers do not have expected result, which leads 
to the fact that executors are located on a smaller number of slave nodes than 
expected, which suffers bad data locality.

An experimental slight change to 
MesosCoarseGrainedSchedulerBackend::buildMesosTasks() shows better executor 
distribution among nodes:
{code}
    while (launchTasks) {
      launchTasks = false

      for (offer <- offers) {
        ...
       }

+      if (conf.getBoolean("spark.deploy.spreadOut", true)) {
+        launchTasks = false
+      }
    }
    tasks.toMap
{code}
One of my spark programs can run 30% faster due to this change because of 
better data locality.

  was:
The MesosCoarseGrainedSchedulerBackend launch executors in a round-robin way 
among accepted offers that are received at once, but it is observed that 
typically executors are launched on a small number of slaves.

It is found that MesosCoarseGrainedSchedulerBackend mostly is receiving only 
one offer once on a cluster composed of many nodes, so that the round-robin 
assignment of executors among offers do not have expected result, which leads 
to the fact that executors are located on a smaller number of slave nodes than 
expected, which suffers bad data locality.

An experimental slight change to 
MesosCoarseGrainedSchedulerBackend::buildMesosTasks() shows better executor 
distribution among nodes:
{code}
    while (launchTasks) {
      launchTasks = false

      for (offer <- offers) {
        ...
       }

+      if (conf.getBoolean("spark.deploy.spreadOut", true)) {
+        launchTasks = false
+      }
    }
    tasks.toMap
{code}
A spark program can run 30% faster due to this change because of better data 
locality.


> [MESOS] More even distribution of executors on Mesos cluster
> ------------------------------------------------------------
>
>                 Key: SPARK-17522
>                 URL: https://issues.apache.org/jira/browse/SPARK-17522
>             Project: Spark
>          Issue Type: Improvement
>          Components: Mesos
>    Affects Versions: 2.0.0
>            Reporter: Sun Rui
>
> The MesosCoarseGrainedSchedulerBackend launch executors in a round-robin way 
> among accepted offers that are received at once, but it is observed that 
> typically executors are launched on a small number of slaves.
> It is found that MesosCoarseGrainedSchedulerBackend mostly is receiving only 
> one offer once on a cluster composed of many nodes, so that the round-robin 
> assignment of executors among offers do not have expected result, which leads 
> to the fact that executors are located on a smaller number of slave nodes 
> than expected, which suffers bad data locality.
> An experimental slight change to 
> MesosCoarseGrainedSchedulerBackend::buildMesosTasks() shows better executor 
> distribution among nodes:
> {code}
>     while (launchTasks) {
>       launchTasks = false
>       for (offer <- offers) {
>         ...
>        }
> +      if (conf.getBoolean("spark.deploy.spreadOut", true)) {
> +        launchTasks = false
> +      }
>     }
>     tasks.toMap
> {code}
> One of my spark programs can run 30% faster due to this change because of 
> better data locality.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

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

Reply via email to