2011-10-24 4 views
1

특정 노드에 대한) (각 맵에 대한 매퍼 내부 기능을하는 클래스의 단일 인스턴스를 만들기하둡 - 내가 하둡 맵리 듀스를위한 자바에서이 같은 클래스 뭔가를

public Class MyClass { 
    public static MyClassMapper extends Mapper { 
     static SomeClass someClassObj = new SomeClass(); 

     void map(Object Key, Text value, Context context) { 
      String someText = someClassObj.getSomeThing(); 
     } 
    } 
} 

나는 오직 하나의 인스턴스를 필요 map() 함수 (노드 당)에서 사용할 수있는 someClassObj를 만듭니다. 어떻게 그것을 달성 할 수 있습니까?

이 주제에 대한 자세한 내용은 언제든지 문의하십시오.

감사합니다.

답변

4

mapreduce.tasktracker.map.tasks.maximum (defaulted to 2)은 TaskTracker가 동시에 실행할 수있는지도 작업의 최대 수를 제어합니다. 이 값을 1로 설정하십시오.

각 맵 작업이 시작되는 것은 별도의 JVM입니다. 또한 mapreduce.job.jvm.numtasks를 -1에서 reuse the JVM으로 설정하십시오.

위의 설정을 사용하면 모든 맵 작업을 단일 JVM에서 순차적으로 실행할 수 있습니다. 이제 SomeClass는 singleton class으로 만들어야합니다.

병렬로 실행할 수있는지도 작업 수가 적기 때문에 노드를 효율적으로 활용하지 않는 것이 좋습니다. 또한 JVM 재사용으로 작업간에 분리가 없으므로 메모리 누수가있는 경우 jvm이 중단 될 때까지 계속 수행됩니다.

+0

꽤 해키지만, 갈 길입니다. +1 –

+0

기본적으로 단일 노드의 모든 맵퍼에 대해 단일 JVM을 가져 오려고했습니다. –

+0

쿨! 나는 이것을 확실히 고려할 것입니다. 나도 +1. –