我有一个类似这样的java类用于hadoop MapReduce
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实例。怎样才能做到呢?
如果你需要关于这个话题的更多细节,请随时询问。
谢谢!
mapreduce.tasktracker.map.tasks.maximum(默认为2)控制TaskTracker同时运行的map任务的最大数量。设置该值为1。
启动的每个映射任务都是一个单独的JVM。还可以将mapreduce.job.jvm.numtasks设置为-1以重用JVM。
上述设置将使所有映射任务在单个JVM中依次运行。现在,SomeClass必须成为一个单例类。
这不是最佳实践,因为节点不能有效利用,因为可以并行运行的map任务数量较少。而且,对于JVM重用,任务之间没有隔离,所以如果有任何内存泄漏,它将继续进行,直到JVM崩溃。