我是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中示例化的。那么Map器示例如何共享静态变量呢?如果他们不能共享,静态变量有什么用?
1条答案
按热度按时间apeeds0o1#
简而言之,他们没有。
您的java编译类将被分发,例如发送到将运行代码的每个节点。这样,每个节点都有一个字节码副本,在自己的jvm中执行。
因此,这种在不同的map()方法调用(由框架完成)之间声明不改变其值的字段的技术是为了避免在多次执行期间同一jvm中同一对象的不必要示例。
[]s!