2015-09-04 27 views
1

我是MapReduce的新手。我看到许多在MapReduce中编写的代码并声明了静态变量。在mapreduce中使用static关键字在Mapper类中

例子:

public class Map extends Mapper<Object, Text, Text, IntWritable>{ 
    private static IntWritable one = new IntWritable(1); 
    private Text word = new Text(); 

    public void map(Object key, Text value, Context context){ 
     //Mapper code 
    } 
    } 
} 

但是有一个疑问,我知道每一个地图的任务是在不同的JVM实例化。那么Mapper实例如何共享静态变量?如果他们不能共享,那么静态变量的用法是什么?

+0

[this]的可能重复(http://stackoverflow.com/questions/24280415/hadoop-map-reduce-task-and-static-variable)。 – YoungHobbit

回答

2

总之,他们不

您的java编译的类将被分发,例如,发送到将运行代码的每个节点。这样,每个节点都有副本的字节码,在其自己的JVM中执行。

因此,在不同的map()方法调用(由框架完成)之间声明不改变其值的字段的这种技术是为了避免在同一JVM中的同一对象的不必要实例, 。

[] s!

+0

谢谢@ mustache1up – Mani

相关问题