簡體   English   中英

映射和減少Hadoop中的類屬性

[英]Map and Reduce class Attributes in Hadoop

因此,我是Hadoop的新手,我對hadoop如何處理Reducer或Mapper類實現的屬性有疑問。

據我了解,reducer的每個實例將在不同的JVM中執行,因此它們之間沒有共享內存。 問題是,如果所有縮減器都試圖訪問它,那么Hadoop如何處理對在縮減器功能之外定義的屬性的並發訪問。 更甚者,如果我嘗試在化簡器中實例化變量,會發生什么。 根據我對並行編程的理解,如果沒有在關鍵區域或原子變量上進行此類操作,則將出現競爭狀況。

一個簡短的例子:

public class SequenceBuilderRed extends Reducer<Text, Text, Text, IntWritable> 
{
    private HashMap<String,myClass> myHashMap;
    protected void setup(Reducer<Text,Text,Text,IntWritable>.Context context) throws IOException, Interrupted Exception
    {
         myHashMap=new HashMap<String,myClass>();
    }

    protected void reduce(Text key Iterable<Text> values, Reducer <Text,Text,Text,IntWritable>.Context context) throws IOException, InterruptedException 
    {
       for(Text value:values)
       {
          if(!myHashMap.containsKey(value.toString())
          {
              myClass newObject = new myClass();
              myHashMap.put(value.toString(),newObject);
          }
       }
     }
}

如果存在具有相同Text作為值的不同化簡,在這種情況下會發生什么?

謝謝!

據我了解,reducer的每個實例將在不同的JVM中執行,因此它們之間沒有共享內存。

是的,基於數據位置,Mapper和Reducer的每個實例通常會在不同的機器上的不同JVM中執行。 因此,它們基於無共享架構。

問題是,如果所有縮減器都試圖訪問它,那么Hadoop如何處理對在縮減器功能之外定義的屬性的並發訪問。

Hadoop不允許在一個Mapper / Reducer類中定義的屬性在多個Mapper / Reducer JVM實例之間共享。 這意味着,如果您在Mapper / Reducer類中指定了一個變量,例如可以從示例中通過其自己的JVM訪問myHashMap ,例如,如果您的工作需要10個Reducer,則每個Reducer實例將創建自己的HashMap

為了進一步闡明, reduce()方法不是並發方法,而是將在單個Reducer JVM實例中順序執行,因此您的HashMap將不會被同時訪問。

因此,如果您的工作需要10個Reducer實例,則將它們放在一起,那么其中的10個Reducers可以根據您的集群容量同時全部運行,並且每個Reducer實例都可以訪問其自己的變量,並且每個Reducer實例都將迭代它要處理的鍵范圍,然后依次為每個鍵和值列表調用reduce()方法。

希望能澄清一些事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM