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

网格计算

开发平台:

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 java.io.DataInput;
  20. import java.io.DataOutput;
  21. import java.io.IOException;
  22. import java.util.HashSet;
  23. import java.util.Set;
  24. import org.apache.hadoop.fs.FileStatus;
  25. import org.apache.hadoop.fs.FileSystem;
  26. import org.apache.hadoop.fs.Path;
  27. import org.apache.hadoop.fs.BlockLocation;
  28. import org.apache.hadoop.io.Text;
  29. import org.apache.hadoop.io.Text;
  30. import org.apache.hadoop.mapred.lib.CombineFileSplit;
  31. /**
  32.  * A sub-collection of input files. Unlike {@link FileSplit}, MultiFileSplit 
  33.  * class does not represent a split of a file, but a split of input files 
  34.  * into smaller sets. The atomic unit of split is a file. <br> 
  35.  * MultiFileSplit can be used to implement {@link RecordReader}'s, with 
  36.  * reading one record per file.
  37.  * @see FileSplit
  38.  * @see MultiFileInputFormat 
  39.  * @deprecated Use {@link org.apache.hadoop.mapred.lib.CombineFileSplit} instead
  40.  */
  41. @Deprecated
  42. public class MultiFileSplit extends CombineFileSplit {
  43.   MultiFileSplit() {}
  44.   
  45.   public MultiFileSplit(JobConf job, Path[] files, long[] lengths) {
  46.     super(job, files, lengths);
  47.   }
  48.   public String[] getLocations() throws IOException {
  49.     HashSet<String> hostSet = new HashSet<String>();
  50.     for (Path file : getPaths()) {
  51.       FileSystem fs = file.getFileSystem(getJob());
  52.       FileStatus status = fs.getFileStatus(file);
  53.       BlockLocation[] blkLocations = fs.getFileBlockLocations(status,
  54.                                           0, status.getLen());
  55.       if (blkLocations != null && blkLocations.length > 0) {
  56.         addToSet(hostSet, blkLocations[0].getHosts());
  57.       }
  58.     }
  59.     return hostSet.toArray(new String[hostSet.size()]);
  60.   }
  61.   private void addToSet(Set<String> set, String[] array) {
  62.     for(String s:array)
  63.       set.add(s); 
  64.   }
  65.   @Override
  66.   public String toString() {
  67.     StringBuffer sb = new StringBuffer();
  68.     for(int i=0; i < getPaths().length; i++) {
  69.       sb.append(getPath(i).toUri().getPath() + ":0+" + getLength(i));
  70.       if (i < getPaths().length -1) {
  71.         sb.append("n");
  72.       }
  73.     }
  74.     return sb.toString();
  75.   }
  76. }