TaggedInputSplit.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.lib;
  19. import java.io.DataInput;
  20. import java.io.DataOutput;
  21. import java.io.IOException;
  22. import org.apache.hadoop.conf.Configurable;
  23. import org.apache.hadoop.conf.Configuration;
  24. import org.apache.hadoop.io.Text;
  25. import org.apache.hadoop.mapred.InputFormat;
  26. import org.apache.hadoop.mapred.InputSplit;
  27. import org.apache.hadoop.mapred.Mapper;
  28. import org.apache.hadoop.util.ReflectionUtils;
  29. /**
  30.  * An {@link InputSplit} that tags another InputSplit with extra data for use by
  31.  * {@link DelegatingInputFormat}s and {@link DelegatingMapper}s.
  32.  */
  33. class TaggedInputSplit implements Configurable, InputSplit {
  34.   private Class<? extends InputSplit> inputSplitClass;
  35.   private InputSplit inputSplit;
  36.   private Class<? extends InputFormat> inputFormatClass;
  37.   private Class<? extends Mapper> mapperClass;
  38.   private Configuration conf;
  39.   public TaggedInputSplit() {
  40.     // Default constructor.
  41.   }
  42.   /**
  43.    * Creates a new TaggedInputSplit.
  44.    * 
  45.    * @param inputSplit The InputSplit to be tagged
  46.    * @param conf The configuration to use
  47.    * @param inputFormatClass The InputFormat class to use for this job
  48.    * @param mapperClass The Mapper class to use for this job
  49.    */
  50.   public TaggedInputSplit(InputSplit inputSplit, Configuration conf,
  51.       Class<? extends InputFormat> inputFormatClass,
  52.       Class<? extends Mapper> mapperClass) {
  53.     this.inputSplitClass = inputSplit.getClass();
  54.     this.inputSplit = inputSplit;
  55.     this.conf = conf;
  56.     this.inputFormatClass = inputFormatClass;
  57.     this.mapperClass = mapperClass;
  58.   }
  59.   /**
  60.    * Retrieves the original InputSplit.
  61.    * 
  62.    * @return The InputSplit that was tagged
  63.    */
  64.   public InputSplit getInputSplit() {
  65.     return inputSplit;
  66.   }
  67.   /**
  68.    * Retrieves the InputFormat class to use for this split.
  69.    * 
  70.    * @return The InputFormat class to use
  71.    */
  72.   public Class<? extends InputFormat> getInputFormatClass() {
  73.     return inputFormatClass;
  74.   }
  75.   /**
  76.    * Retrieves the Mapper class to use for this split.
  77.    * 
  78.    * @return The Mapper class to use
  79.    */
  80.   public Class<? extends Mapper> getMapperClass() {
  81.     return mapperClass;
  82.   }
  83.   public long getLength() throws IOException {
  84.     return inputSplit.getLength();
  85.   }
  86.   public String[] getLocations() throws IOException {
  87.     return inputSplit.getLocations();
  88.   }
  89.   @SuppressWarnings("unchecked")
  90.   public void readFields(DataInput in) throws IOException {
  91.     inputSplitClass = (Class<? extends InputSplit>) readClass(in);
  92.     inputSplit = (InputSplit) ReflectionUtils
  93.        .newInstance(inputSplitClass, conf);
  94.     inputSplit.readFields(in);
  95.     inputFormatClass = (Class<? extends InputFormat>) readClass(in);
  96.     mapperClass = (Class<? extends Mapper>) readClass(in);
  97.   }
  98.   private Class<?> readClass(DataInput in) throws IOException {
  99.     String className = Text.readString(in);
  100.     try {
  101.       return conf.getClassByName(className);
  102.     } catch (ClassNotFoundException e) {
  103.       throw new RuntimeException("readObject can't find class", e);
  104.     }
  105.   }
  106.   public void write(DataOutput out) throws IOException {
  107.     Text.writeString(out, inputSplitClass.getName());
  108.     inputSplit.write(out);
  109.     Text.writeString(out, inputFormatClass.getName());
  110.     Text.writeString(out, mapperClass.getName());
  111.   }
  112.   public Configuration getConf() {
  113.     return conf;
  114.   }
  115.   public void setConf(Configuration conf) {
  116.     this.conf = conf;
  117.   }
  118. }