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

np8igboo  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(370)

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

apeeds0o

apeeds0o1#

简而言之,他们没有。
您的java编译类将被分发,例如发送到将运行代码的每个节点。这样,每个节点都有一个字节码副本,在自己的jvm中执行。
因此,这种在不同的map()方法调用(由框架完成)之间声明不改变其值的字段的技术是为了避免在多次执行期间同一jvm中同一对象的不必要示例。
[]s!

相关问题