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

网格计算

开发平台:

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 junit.framework.TestCase;
  20. import java.io.IOException;
  21. import org.apache.commons.logging.Log;
  22. import org.apache.commons.logging.LogFactory;
  23. import org.apache.hadoop.conf.Configuration;
  24. import org.apache.hadoop.hdfs.MiniDFSCluster;
  25. import org.apache.hadoop.examples.PiEstimator;
  26. import org.apache.hadoop.fs.FileSystem;
  27. import org.apache.commons.logging.impl.Log4JLogger;
  28. import org.apache.log4j.Level;
  29. /**
  30.  * A JUnit test to test configired task limits.
  31.  */
  32. public class TestTaskLimits extends TestCase {
  33.   {     
  34.     ((Log4JLogger)JobInProgress.LOG).getLogger().setLevel(Level.ALL);
  35.   }     
  36.   private static final Log LOG =
  37.     LogFactory.getLog(TestMiniMRWithDFS.class.getName());
  38.   
  39.   static final int NUM_MAPS = 5;
  40.   static final int NUM_SAMPLES = 100;
  41.   
  42.   public static class TestResult {
  43.     public String output;
  44.     public RunningJob job;
  45.     TestResult(RunningJob job, String output) {
  46.       this.job = job;
  47.       this.output = output;
  48.     }
  49.   }
  50.   
  51.   static void runPI(MiniMRCluster mr, JobConf jobconf) throws IOException {
  52.     LOG.info("runPI");
  53.     double estimate = PiEstimator.estimate(NUM_MAPS, NUM_SAMPLES, jobconf).doubleValue();
  54.     double error = Math.abs(Math.PI - estimate);
  55.     System.out.println("PI estimation " + error);
  56.   }
  57.   /**
  58.    * Run the pi test with a specifix value of 
  59.    * mapred.jobtracker.maxtasks.per.job. Returns true if the job succeeded.
  60.    */
  61.   private boolean runOneTest(int maxTasks) throws IOException {
  62.     MiniDFSCluster dfs = null;
  63.     MiniMRCluster mr = null;
  64.     FileSystem fileSys = null;
  65.     boolean success = false;
  66.     try {
  67.       final int taskTrackers = 2;
  68.       Configuration conf = new Configuration();
  69.       conf.setInt("mapred.jobtracker.maxtasks.per.job", maxTasks);
  70.       dfs = new MiniDFSCluster(conf, 4, true, null);
  71.       fileSys = dfs.getFileSystem();
  72.       JobConf jconf = new JobConf(conf);
  73.       mr = new MiniMRCluster(0, 0, taskTrackers, fileSys.getUri().toString(), 1,
  74.                              null, null, null, jconf);
  75.       
  76.       JobConf jc = mr.createJobConf();
  77.       try {
  78.         runPI(mr, jc);
  79.         success = true;
  80.       } catch (IOException e) {
  81.         success = false;
  82.       }
  83.     } finally {
  84.       if (dfs != null) { dfs.shutdown(); }
  85.       if (mr != null) { mr.shutdown(); }
  86.     }
  87.     return success;
  88.   }
  89.   public void testTaskLimits() throws IOException {
  90.     System.out.println("Job 1 running with max set to 2");
  91.     boolean status = runOneTest(2);
  92.     assertTrue(status == false);
  93.     System.out.println("Job 1 failed as expected.");
  94.     // verify that checking this limit works well. The job
  95.     // needs 5 mappers and we set the limit to 7.
  96.     System.out.println("Job 2 running with max set to 7.");
  97.     status = runOneTest(7);
  98.     assertTrue(status == true);
  99.     System.out.println("Job 2 succeeded as expected.");
  100.     System.out.println("Job 3 running with max disabled.");
  101.     status = runOneTest(-1);
  102.     assertTrue(status == true);
  103.     System.out.println("Job 3 succeeded as expected.");
  104.   }
  105. }