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