public List<Pair<K2, V2>> run() throws IOException {
    // inputs starts with the user-provided inputs.
    List inputs = this.inputList;

    if (mapReducePipeline.size() == 0) {
      LOG.warn("No Mapper or Reducer instances in pipeline; this is a trivial test.");
    }

    if (inputs.size() == 0) {
      LOG.warn("No inputs configured to send to MapReduce pipeline; this is a trivial test.");
    }

    for (Pair<Mapper, Reducer> job : mapReducePipeline) {
      // Create a MapReduceDriver to run this phase of the pipeline.
      MapReduceDriver mrDriver = new MapReduceDriver(job.getFirst(), job.getSecond());

      mrDriver.setCounters(getCounters());

      // Add the inputs from the user, or from the previous stage of the pipeline.
      for (Object input : inputs) {
        mrDriver.addInput((Pair) input);
      }

      // Run the MapReduce "job". The output of this job becomes
      // the input to the next job.
      inputs = mrDriver.run();
    }

    // The last list of values stored in "inputs" is actually the outputs.
    // Unfortunately, due to the variable-length list of MR passes the user
    // can test, this is not type-safe.
    return (List<Pair<K2, V2>>) inputs;
  }
 private List<Pair<PartitionDataWritable, List<AdapterWithObjectWritable>>>
     getReducerDataFromMapperInput(
         final List<Pair<PartitionDataWritable, AdapterWithObjectWritable>> mapperResults) {
   final List<Pair<PartitionDataWritable, List<AdapterWithObjectWritable>>> reducerInputSet =
       new ArrayList<Pair<PartitionDataWritable, List<AdapterWithObjectWritable>>>();
   for (final Pair<PartitionDataWritable, AdapterWithObjectWritable> pair : mapperResults) {
     getListFor(pair.getFirst(), reducerInputSet).add(pair.getSecond());
   }
   return reducerInputSet;
 }
 @Test
 public void testVisitPageMR() throws Exception {
   // 添加模拟数据
   generateVisitData();
   mrPageVisitor.getConfiguration().set("custom.period", "month");
   // 开始计算
   List<Pair<PageVisitKey, PageVisitOutputValue>> results = mrPageVisitor.run(true);
   for (int i = 0; i < results.size(); i++) {
     Pair<PageVisitKey, PageVisitOutputValue> pair = results.get(i);
     System.out.println(
         "Key:" + pair.getFirst().toString() + ", Value:" + pair.getSecond().toString());
   }
 }
 public List<Pair<Text, List<Text>>> getReducerPairsFromFile(String file) throws IOException {
   List<Pair<Text, Text>> unsplitPairs = this.getPairsFromFile(file);
   List<Pair<Text, List<Text>>> splitPairs = new LinkedList<Pair<Text, List<Text>>>();
   for (Pair<Text, Text> unsplitPair : unsplitPairs) {
     List<Text> splitValues = new LinkedList<Text>();
     String[] splits = unsplitPair.getSecond().toString().split("(\r\n|\n)");
     for (String split : splits) {
       splitValues.add(new Text(split));
     }
     splitPairs.add(new Pair<Text, List<Text>>(unsplitPair.getFirst(), splitValues));
   }
   return splitPairs;
 }
 private PartitionData getPartitionDataFor(
     final List<Pair<PartitionDataWritable, AdapterWithObjectWritable>> mapperResults,
     final String id,
     final boolean primary) {
   for (final Pair<PartitionDataWritable, AdapterWithObjectWritable> pair : mapperResults) {
     if (((FeatureWritable) pair.getSecond().getObjectWritable().get())
             .getFeature()
             .getID()
             .equals(id)
         && (pair.getFirst().getPartitionData().isPrimary() == primary)) {
       return pair.getFirst().getPartitionData();
     }
   }
   return null;
 }
 @Test
 public void testMapReduce() throws Exception {
   System.out.println(
       "MapReduce,Begin------------------------------------------------------------------");
   // 多个输入源
   BufferedReader[] arr = {
     new BufferedReader(new FileReader("D:\\hdfs\\warehouse\\appdetail.log"))
   };
   LongWritable longWritable = new LongWritable();
   String line = null;
   for (BufferedReader br : arr) {
     while (null != (line = br.readLine())) {
       mapReduceDriver.withInput(longWritable, new Text(line));
     }
     br.close();
   }
   List<Pair<OutFieldsBaseModel, OutFieldsBaseModel>> onlineList = mapReduceDriver.run();
   Collections.sort(
       onlineList,
       new Comparator<Pair<OutFieldsBaseModel, OutFieldsBaseModel>>() {
         @Override
         public int compare(
             Pair<OutFieldsBaseModel, OutFieldsBaseModel> o1,
             Pair<OutFieldsBaseModel, OutFieldsBaseModel> o2) {
           if (o1.getFirst().getSuffix().compareTo(o2.getFirst().getSuffix()) > 0) {
             return -1;
           }
           return 0;
         }
       });
   for (Pair<OutFieldsBaseModel, OutFieldsBaseModel> pair : onlineList) {
     String lin =
         pair.getFirst().toString()
             + "\t"
             + pair.getSecond().toString()
             + "\t"
             + pair.getFirst().getSuffix();
     System.out.println(lin);
   }
   System.out.println(
       "MapReduce,End------------------------------------------------------------------");
 }