Logic for determining whether to create a new JVM can interfere with 
Capacity-Scheduler and JVM reuse
-----------------------------------------------------------------------------------------------------

                 Key: MAPREDUCE-2973
                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-2973
             Project: Hadoop Map/Reduce
          Issue Type: Bug
          Components: tasktracker
    Affects Versions: 0.20.2
         Environment: N/A
            Reporter: Jonathon Hare
            Priority: Minor


We use the capacity scheduler to enable jobs with large memory requirements to 
be run on our cluster. The individual tasks have a large initial overhead when 
they load cached data. Using the JVM reuse option 
({{mapred.job.reuse.jvm.num.tasks}}) and by caching data in a static variable 
we can reduce the overhead. 

The current {{JvmManager}} implementation will prefer creating new JVMs to 
reusing existing ones if the number of already created JVMs is less than the 
maximum. In the extreme case where the capacity scheduler is used to limit the 
number of tasks on a node to 1, but the number of [map|reduce] tasks per node 
is set to say 16, then 16 JVMs will be created before one of them is reused. 
Obviously, if the amount of cached data in the memory of each JVM is large, 
then node can rapidly run out of memory! What should really happen in this case 
is that the first created JVM should be reused, and others should not be 
spawned.

To work-around this problem on our cluster, we have modified the logic in the 
{{reapJVM()}} method in {{JvmManager}} to prefer to reuse an existing JVM (idle 
& belonging to the same job) over starting a new JVM, or killing an existing 
idle JVM.



--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to