爲此,你最好有一個減速器。
爲了保證所有的號碼來獲得相同的減速機,你必須做兩件事情:
- :發射的映射
- 設置reduce任務爲零的所有輸入值相同的密鑰。
您map()
方法可能看起來像以下:
@Override
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
context.write(new Text("MyAwesomeKey"), key); // assuming that your number is being read in the key
}
在你Reduce
類,有一個屬性max
,是這樣的: Long max
而且reduce()
方法可能看起來像以下:
@Override
public void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {
context.write(new Text("MyAwesomeKey"), key); // assuming that your number is being read in the key
}
然後覆蓋run()
也爲我們覆蓋reduce()
:
public void run(Context context) throws IOException, InterruptedException {
setup(context);
while (context.nextKey()) {
reduce(context.getCurrentKey(), context.getValues(), context);
}
context.write(new LongWritable(max),new Text("")); // write the max value
cleanup(context);
}
要設置減少任務之一,請執行下列操作在你的工作的run()
,注意,這是由上述run()
不同:
job.setNumReduceTasks(1);
注意:以上代碼均遵循新的mapreduce API,我相信使用舊的mapred API,我們將無法在減速機完成作業後獲得單點掛鉤,因爲我們可以通過重寫Reducer的run()
來完成。
非常感謝你的回覆。我會努力工作,我會讓你知道的。謝謝。 – user2085189 2013-02-20 00:48:26