[英]Hadoop - Creating a single instance of a class for each map() functions inside the Mapper for a particular node
我在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();
}
}
}
我只需要someClassObj的一个实例可用于每个节点的map()函数。 怎么能实现呢?
如果您需要有关此主题的更多详细信息,请随时询问。
谢谢!
mapreduce.tasktracker.map.tasks.maximum(默认为2)控制TaskTracker同时运行的最大映射任务数。 将此值设置为1。
每个map任务启动都是一个单独的JVM。 还要将mapreduce.job.jvm.numtasks设置为-1以重用JVM 。
上述设置将使所有映射任务按顺序在单个JVM中运行。 现在,SomeClass必须成为单例类 。
这不是最佳实践,因为节点没有被有效利用,因为可以并行运行的地图任务数量较少。 此外,通过JVM重用,任务之间没有隔离,因此如果存在任何内存泄漏,它将继续执行直到jvm崩溃。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.