在mapreduce中使用Mapper类中的static关键字

时间:2015-09-04 11:25:56

标签: hadoop mapreduce bigdata

我是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实例如何共享静态变量呢?如果他们不能分享,静态变量的用途是什么?

1 个答案:

答案 0 :(得分:2)

简而言之,他们没有

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

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

[]中!