Hadoop—在特定节点的Mapper中为每个map()函数创建一个类的单个实例



我有一个类似这样的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崩溃。

相关内容

  • 没有找到相关文章

最新更新