package org.apache.hadoop.mapred; import java.io.IOException; import java.util.Random; import java.util.Comparator; import java.util.List; import java.util.PriorityQueue; import org.apache.hadoop.tools.rumen.JobStory; import org.apache.hadoop.tools.rumen.JobStoryProducer; import org.apache.hadoop.tools.rumen.ZombieCluster; import org.apache.hadoop.tools.rumen.ZombieJob; import org.apache.hadoop.tools.rumen.ZombieJobProducer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; public class SortedZombieJobProducer implements JobStoryProducer { private ZombieJobProducer producer; private boolean isProducerEmpty = false; private final PriorityQueue<ZombieJob> jobBuffer = new PriorityQueue<ZombieJob>(1, new Comparator<ZombieJob>() { @Override public int compare(ZombieJob o1, ZombieJob o2) { if (o1.getSubmissionTime() < o2.getSubmissionTime()) return -1; else if (o1.getSubmissionTime() > o2.getSubmissionTime()) return 1; return 0; } }); private int jobBufferSize = 100; private void initBuffer() throws IOException { for (int i = 0; i < jobBufferSize; ++i) { ZombieJob job = producer.getNextJob(); if (job == null) { isProducerEmpty = true; break; } jobBuffer.add(job); } } public SortedZombieJobProducer(Path path, ZombieCluster cluster, Configuration conf, int bufferSize) throws IOException { producer = new ZombieJobProducer(path, cluster, conf); jobBufferSize = bufferSize; initBuffer(); } public SortedZombieJobProducer(Path path, ZombieCluster cluster, Configuration conf, long randomSeed, int bufferSize) throws IOException { producer = new ZombieJobProducer(path, cluster, conf); jobBufferSize = bufferSize; initBuffer(); } @Override public ZombieJob getNextJob() throws IOException { ZombieJob job; if (!isProducerEmpty) { job = producer.getNextJob(); if (job != null) jobBuffer.add(job); else isProducerEmpty = true; } job = jobBuffer.poll(); return job; } @Override public void close() throws IOException { // TODO Auto-generated method stub producer.close(); } }