[
https://issues.apache.org/jira/browse/HADOOP-4667?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Matei Zaharia updated HADOOP-4667:
----------------------------------
Attachment: fs-global-v0.patch
Here's a preliminary version of this patch. It includes the patches for
HADOOP-4789 and https://issues.apache.org/jira/browse/HADOOP-4665 because it
depends on those. This may make it confusing to read but I will post simpler
versions once those patches are in. The code of interest here is really just in
assignTasks and getAllowedLocalityLevel in FairScheduler.java. In addition,
doing this requires a change to the JobInProgress API to have an
obtainNewMapTask version that takes a locality level (distance up the
topology). This was already used internally in findMapTask but there is now a
package-visible method that exposes it to the scheduler.
> Global scheduling in the Fair Scheduler
> ---------------------------------------
>
> Key: HADOOP-4667
> URL: https://issues.apache.org/jira/browse/HADOOP-4667
> Project: Hadoop Core
> Issue Type: New Feature
> Components: contrib/fair-share
> Reporter: Matei Zaharia
> Attachments: fs-global-v0.patch
>
>
> The current schedulers in Hadoop all examine a single job on every heartbeat
> when choosing which tasks to assign, choosing the job based on FIFO or fair
> sharing. There are inherent limitations to this approach. For example, if the
> job at the front of the queue is small (e.g. 10 maps, in a cluster of 100
> nodes), then on average it will launch only one local map on the first 10
> heartbeats while it is at the head of the queue. This leads to very poor
> locality for small jobs. Instead, we need a more "global" view of scheduling
> that can look at multiple jobs. To resolve the locality problem, we will use
> the following algorithm:
> - If the job at the head of the queue has no local task to launch, skip it
> and look through other jobs.
> - If a job has been skipped for at least T seconds while waiting for a local
> task, stop skipping it and allow it to launch non-local tasks.
> - If no job can launch a task at all, return to the head of the queue and
> launch a non-local task from the first job.
> This algorithm improves locality while bounding the delay that any job
> experiences in launching a task.
> We will actually provide two values of T - one for data-local tasks and a
> longer wait for rack-local tasks. It also turns out that whether waiting is
> useful depends on how many tasks are left in the job - the probability of
> getting a heartbeat from a node with a local task. Thus there may be logic
> for removing the wait on the last few tasks in the job.
> As a related issue, once we allow global scheduling, we can launch multiple
> tasks per heartbeat, as in HADOOP-3136. The initial implementation of
> HADOOP-3136 adversely affected performance because it only launched multiple
> tasks from the same job, but with the wait rule above, we will only do this
> for jobs that are allowed to launch non-local tasks.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.