TestFieldSelection.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:5k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.mapred;
  19. import org.apache.hadoop.fs.*;
  20. import org.apache.hadoop.io.*;
  21. import org.apache.hadoop.mapred.lib.*;
  22. import junit.framework.TestCase;
  23. import java.text.NumberFormat;
  24. public class TestFieldSelection extends TestCase {
  25. private static NumberFormat idFormat = NumberFormat.getInstance();
  26.   static {
  27.     idFormat.setMinimumIntegerDigits(4);
  28.     idFormat.setGroupingUsed(false);
  29.   }
  30.   public void testFieldSelection() throws Exception {
  31.     launch();
  32.   }
  33.   public static void launch() throws Exception {
  34.     JobConf conf = new JobConf(TestFieldSelection.class);
  35.     FileSystem fs = FileSystem.get(conf);
  36.     int numOfInputLines = 10;
  37.     Path OUTPUT_DIR = new Path("build/test/output_for_field_selection_test");
  38.     Path INPUT_DIR = new Path("build/test/input_for_field_selection_test");
  39.     String inputFile = "input.txt";
  40.     fs.delete(INPUT_DIR, true);
  41.     fs.mkdirs(INPUT_DIR);
  42.     fs.delete(OUTPUT_DIR, true);
  43.     StringBuffer inputData = new StringBuffer();
  44.     StringBuffer expectedOutput = new StringBuffer();
  45.     FSDataOutputStream fileOut = fs.create(new Path(INPUT_DIR, inputFile));
  46.     for (int i = 0; i < numOfInputLines; i++) {
  47.         inputData.append(idFormat.format(i));
  48.         inputData.append("-").append(idFormat.format(i+1));
  49.         inputData.append("-").append(idFormat.format(i+2));
  50.         inputData.append("-").append(idFormat.format(i+3));
  51.         inputData.append("-").append(idFormat.format(i+4));
  52.         inputData.append("-").append(idFormat.format(i+5));
  53.         inputData.append("-").append(idFormat.format(i+6));
  54.         inputData.append("n");
  55.         expectedOutput.append(idFormat.format(i+3));
  56.         expectedOutput.append("-" ).append (idFormat.format(i+2));
  57.         expectedOutput.append("-" ).append (idFormat.format(i+1));
  58.         expectedOutput.append("-" ).append (idFormat.format(i+5));
  59.         expectedOutput.append("-" ).append (idFormat.format(i+6));
  60.         expectedOutput.append("-" ).append (idFormat.format(i+6));
  61.         expectedOutput.append("-" ).append (idFormat.format(i+5));
  62.         expectedOutput.append("-" ).append (idFormat.format(i+1));
  63.         expectedOutput.append("-" ).append (idFormat.format(i+2));
  64.         expectedOutput.append("-" ).append (idFormat.format(i+3));
  65.         expectedOutput.append("-" ).append (idFormat.format(i+0));
  66.         expectedOutput.append("-" ).append (idFormat.format(i+1));
  67.         expectedOutput.append("-" ).append (idFormat.format(i+2));
  68.         expectedOutput.append("-" ).append (idFormat.format(i+3));
  69.         expectedOutput.append("-" ).append (idFormat.format(i+4));
  70.         expectedOutput.append("-" ).append (idFormat.format(i+5));
  71.         expectedOutput.append("-" ).append (idFormat.format(i+6));
  72.         expectedOutput.append("n");
  73.     }
  74.     fileOut.write(inputData.toString().getBytes("utf-8"));
  75.     fileOut.close();
  76.     System.out.println("inputData:");
  77.     System.out.println(inputData.toString());
  78.     JobConf job = new JobConf(conf, TestFieldSelection.class);
  79.     FileInputFormat.setInputPaths(job, INPUT_DIR);
  80.     job.setInputFormat(TextInputFormat.class);
  81.     job.setMapperClass(FieldSelectionMapReduce.class);
  82.     job.setReducerClass(FieldSelectionMapReduce.class);
  83.     FileOutputFormat.setOutputPath(job, OUTPUT_DIR);
  84.     job.setOutputKeyClass(Text.class);
  85.     job.setOutputValueClass(Text.class);
  86.     job.setOutputFormat(TextOutputFormat.class);
  87.     job.setNumReduceTasks(1);
  88.     job.set("mapred.data.field.separator", "-");
  89.     job.set("map.output.key.value.fields.spec", "6,5,1-3:0-");
  90.     job.set("reduce.output.key.value.fields.spec", ":4,3,2,1,0,0-");
  91.     JobClient.runJob(job);
  92.     //
  93.     // Finally, we compare the reconstructed answer key with the
  94.     // original one.  Remember, we need to ignore zero-count items
  95.     // in the original key.
  96.     //
  97.     boolean success = true;
  98.     Path outPath = new Path(OUTPUT_DIR, "part-00000");
  99.     String outdata = TestMiniMRWithDFS.readOutput(outPath,job);
  100.     assertEquals(expectedOutput.toString(),outdata);
  101.     fs.delete(OUTPUT_DIR, true);
  102.     fs.delete(INPUT_DIR, true);
  103.   }
  104.   /**
  105.    * Launches all the tasks in order.
  106.    */
  107.   public static void main(String[] argv) throws Exception {
  108.     launch();
  109.   }
  110. }