我是MapReduce的新手。我见过许多用MapReduce编写的代码并声明静态变量。
示例:
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
}
}
}
但是有一个疑问,我知道每个Map任务都是在单独的JVM中实例化的。那么Mapper实例如何共享静态变量呢?如果他们不能分享,静态变量的用途是什么?
答案 0 :(得分:2)
简而言之,他们没有。
您的java编译类将被分发,例如发送到将运行代码的每个节点。这样每个节点都有你的字节码的副本,在自己的JVM中执行。
因此,这种声明不同的map()方法调用(由框架完成)之间不会改变其值的字段的技术是为了避免在同一个JVM中的同一个对象的不必要实例,执行。
[]中!