0

map-reduce プログラムでは、各マッパーが一意の番号 (他のマッパーの番号とは異なる) を生成するようにします。これは、ユーザー定義のカウンターを使用して実行できると思います。ただし、カウンターからわかるように、マッパーが完了すると、カウンターの値がタスクトラッカーに送信されます。それが本当なら、マッパーで一意の番号を生成する方法について少し混乱しました。

4

1 に答える 1

0

各マッパーで Universally Unique Identifier (UUID) を使用しないのはなぜですか?

このリンクを確認してください。Javaにはこれが組み込まれています。

コメント後に編集:

UUID を分割内のすべてのレコードで 1 回だけ生成する場合は、map タスクの開始時に 1 回だけ呼び出される Mapper クラスの setup メソッドをオーバーライドできます。生成された UUID は変数に格納され、map() 関数の各レコードに使用されます。

mapreduce APIを使用している場合、その方法は次のとおりです --

public static class SampleMapper extends
            Mapper<LongWritable, Text, Text, Text> {

   String uuid;

   /**
    * This method will be called once at the beginning
    * of each map task
    */
    @Override
    protected void setup(Context context) throws IOException,
            InterruptedException {
        //generate your uuid here
        uuid = generateUUID();
    }


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

        //use uuid here
    }

}

mapred APIの場合、これを行う方法は次のとおりです --

public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { 

     String uuid;

     @override
     public void configure(JobConf job) {
         uuid = gernerateUUID();
     }

     public void map(LongWritable key, Text value, 
        OutputCollector<Text, IntWritable> output, Reporter reporter)
              throws IOException { 

          //use uuid here
     }

}

ここにリンクがあります。

于 2013-09-24T05:47:18.707 に答える