2017-06-13 4 views
0

私は共有することができますHashMapと異なるマッパー静的のような値を持つ?私はハープクラスターで仕事をしています。そして、私は、異なるデータノードで動いているすべてのマッパーの間で変数の値を共有しようとしています。Hadoopのマッパー間でHashMapを共有する方法は?

INPUT ==> FILEIDファイルパス

のInputFormat => KeyValueTextInputFormat

public class Demo { 

    static int termID=0; 

    public static class DemoMapper extends Mapper<Object, Text, IntWritable, Text> { 


     static HashMap<String, Integer> termMapping = new HashMap<String, Integer>(); 


     @Override 
     protected void map(Object key, Text value, Context context) throws IOException, InterruptedException { 

       BufferedReader reader = new BufferedReader(new FileReader(value)); 

       String line; 
       String currentTerm; 

       while ((line = reader.readLine()) != null) { 
        tokenizer = new StringTokenizer(line, " "); 
        while (tokenizer.hasMoreTokens()) { 
         currentTerm = tokenizer.nextToken(); 
         if (!termMap.containsKey(currentTerm)) { 
          if (!termMapping.containsKey(currentTerm)) { 
           termMapping.put(currentTerm, termID++); 
          } 
          termMap.put(currentTerm, 1); 
         } else { 
          termMap.put(currentTerm, termMap.get(currentTerm) + 1); 
         } 
        } 
       } 
     } 
    } 


    public static void main(String[] args) { 

    } 

} 
+0

のように思えますタスク間のスパークで。 MapReduce –

+0

Thxでそれを試したことはありませんが、Sparkを使用したくありません –

+0

さて、地図を追加しようとしたMapReduceコードを表示してください。どのようなエラーがありましたか? –

答えて

0

私はあなたが本当に何を共有する必要はないと思います。

ここでやっていることはすべて、単純なさまざまなものです。ワード数が(of paths)です。

出力を(currentTerm, 1)とし、レデューサーが適切な集計を処理するようにしてください。パフォーマンスを向上させるためにCombinerで投げることもできます。

重複を心配する必要はありません。WordCountの例を振り返ります。また

は、私はあなたがファイルを読み取り、(String, int)データ

MapWritableクラスもありますがoutputingされている場合は、あなたのタイプではなくextends Mapper<LongWritable, Text, Text, IntWritable>をすべきだと思いますが、それは私はあなたがマップをブロードキャストすることができます知ってやり過ぎ

+0

私は、4つの入力スプリットが10のファイルパスを含むと仮定し、4マッパーが実行されます。 **各ワードに一意のIDを生成したい** ** WordCountではない**各ユニークワードがある各マッパーのカウンタが必要な理由 –

+0

ここで説明したとおりですReducerの 'setup'メソッドを使ってカウンタを初期化することができます。 https://stackoverflow.com/questions/11737750/how-to-handle-id-generation-on-a-hadoop-cluster –

+0

また、私はあなたのファイルパスがどのように見えるのか分かりませんが、 'new FileReader(value) 'は、ローカルディスクではなくネットワークファイルパスから読み込む必要があります。 –

関連する問題