2015-09-04 47 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

相關問題