package com.github.sefler1987.javaworker.worker.mapreduce;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.github.sefler1987.javaworker.worker.ConfigurableWorker;
import com.github.sefler1987.javaworker.worker.WorkerEvent;
import com.github.sefler1987.javaworker.worker.WorkerListener;
public class Map2ReduceConnector implements WorkerListener {
//可以配置多个reducer
private List<ConfigurableWorker> reduces = new ArrayList<ConfigurableWorker>();
private int lastIndex = 0;
public Map2ReduceConnector(List<ConfigurableWorker> reduces) {
this.reduces.addAll(reduces);
}
@Override
public List<WorkerEvent> intrests() {
return Arrays.asList(WorkerEvent.TASK_COMPLETE);
}
//Map任务执行完成后,触发这个监听器的回调
@Override
public synchronized void onEvent(WorkerEvent event, Object... args) {
MapReducePageURLMiningTask task = (MapReducePageURLMiningTask) args[0];
lastIndex = ++lastIndex % reduces.size();
//分配给哪个reducer
reduces.get(lastIndex).addTask(task);
}
}