[
https://issues.apache.org/jira/browse/HADOOP-3759?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12619474#action_12619474
]
Hemanth Yamijala commented on HADOOP-3759:
------------------------------------------
After some internal discussions, we are proposing the following behavior with
respect to default values of the configuration options MAX_MEM and
MAX_MEM_PER_TASK. In the description below, MAX_MEM is specified for a
tasktracker, and MAX_MEM_PER_TASK is specified in a job's configuration.
- We should provide an option to turn off the behavior described in the above
comment. We can do this by defaulting the configuration option values to
something invalid, like -1.
- This gives rise to the following 4 conditions, and the proposed behavior of
the system for each:
-- Both MAX_MEM and MAX_MEM_PER_TASK are set to invalid values: This will
result in the current Map/Reduce system behavior. Essentially, it will turn off
the fixes in this JIRA and in HADOOP-3581, thereby providing backwards
compatibility.
-- Both MAX_MEM and MAX_MEM_PER_TASK are specified as valid values: This will
result in the behavior described on this JIRA and also in HADOOP-3581. In
short, it will result in the tasks of the job being scheduled on TaskTrackers
with sufficient free memory, and tasks which exceed the memory limits will be
killed.
-- MAX_MEM is set to invalid value but MAX_MEM_PER_TASK is specified for a job:
MAX_MEM_PER_TASK is ignored. Since MAX_MEM is an administrative option, if an
administrator has disabled it , no memory specific scheduling can be turned on
by users.
-- MAX_MEM is specified, but MAX_MEM_PER_TASK is set to an invalid value: A
task of this job will run on this TT only if the free memory is at least equal
to MAX_MEM / number of slots on the TT. For e.g. consider a TT with 8 GB as
MAX_MEM and 2 slots. Consider two jobs: one with a 6 GB MAX_MEM_PER_TASK and
the other which has no valid value specified. If a task of the first job is
running on this TT, there is only 2 GB that can be guaranteed for any other
job. Since MAX_MEM / number of slots is 4 GB, no task of the second job would
run on this TT until the high memory task completes. In other words, we are
defining that if a job has not specified any MAX_MEM_PER_TASK, it is guaranteed
at least a MAX_MEM / number of slots amount of memory by the system. This seems
to be fairly deterministic compared to scheduling tasks of the second job and
binding their MAX_MEM_PER_TASK to some arbitrary amount of free memory.
As the above choice means that the RAM intensive jobs can prevent other jobs
from running, there must be some way to counter-balance this effect. One way
could be for schedulers like HADOOP-3445 to artifically consider the RAM
intensive job as using more slots than actual, and thereby subjecting them to
limits faster.
Comments ?
> Provide ability to run memory intensive jobs without affecting other running
> tasks on the nodes
> -----------------------------------------------------------------------------------------------
>
> Key: HADOOP-3759
> URL: https://issues.apache.org/jira/browse/HADOOP-3759
> Project: Hadoop Core
> Issue Type: Improvement
> Components: mapred
> Reporter: Hemanth Yamijala
> Assignee: Hemanth Yamijala
> Fix For: 0.19.0
>
> Attachments: HADOOP-3759.patch
>
>
> In HADOOP-3581, we are discussing how to prevent memory intensive tasks from
> affecting Hadoop daemons and other tasks running on a node. A related
> requirement is that users be provided an ability to run jobs which are memory
> intensive. The system must provide enough knobs to allow such jobs to be run
> while still maintaining the requirements of HADOOP-3581.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.