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

网格计算

开发平台:

Java

  1. /**
  2.  *
  3.  * Licensed under the Apache License, Version 2.0
  4.  * (the "License"); you may not use this file except in compliance with
  5.  * the License. You may obtain a copy of the License at
  6.  *
  7.  * http://www.apache.org/licenses/LICENSE-2.0
  8.  *
  9.  * Unless required by applicable law or agreed to in writing, software
  10.  * distributed under the License is distributed on an "AS IS" BASIS,
  11.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  12.  * implied. See the License for the specific language governing
  13.  * permissions and limitations under the License.
  14.  *
  15.  * @author: Sriram Rao (Kosmix Corp.)
  16.  * 
  17.  * We need to provide the ability to the code in fs/kfs without really
  18.  * having a KFS deployment.  For this purpose, use the LocalFileSystem
  19.  * as a way to "emulate" KFS.
  20.  */
  21. package org.apache.hadoop.fs.kfs;
  22. import java.io.*;
  23. import org.apache.hadoop.conf.Configuration;
  24. import org.apache.hadoop.fs.FSDataInputStream;
  25. import org.apache.hadoop.fs.FSDataOutputStream;
  26. import org.apache.hadoop.fs.FileSystem;
  27. import org.apache.hadoop.fs.FileStatus;
  28. import org.apache.hadoop.fs.FileUtil;
  29. import org.apache.hadoop.fs.Path;
  30. import org.apache.hadoop.fs.BlockLocation;
  31. public class KFSEmulationImpl implements IFSImpl {
  32.     FileSystem localFS;
  33.     
  34.     public KFSEmulationImpl(Configuration conf) throws IOException {
  35.         localFS = FileSystem.getLocal(conf);
  36.     }
  37.     public boolean exists(String path) throws IOException {
  38.         return localFS.exists(new Path(path));
  39.     }
  40.     public boolean isDirectory(String path) throws IOException {
  41.         return localFS.isDirectory(new Path(path));
  42.     }
  43.     public boolean isFile(String path) throws IOException {
  44.         return localFS.isFile(new Path(path));
  45.     }
  46.     public String[] readdir(String path) throws IOException {
  47.         FileStatus[] p = localFS.listStatus(new Path(path));
  48.         String[] entries = null;
  49.         if (p == null) {
  50.             return null;
  51.         }
  52.         entries = new String[p.length];
  53.         for (int i = 0; i < p.length; i++)
  54.             entries[i] = p[i].getPath().toString();
  55.         return entries;
  56.     }
  57.     public FileStatus[] readdirplus(Path path) throws IOException {
  58.         return localFS.listStatus(path);
  59.     }
  60.     public int mkdirs(String path) throws IOException {
  61.         if (localFS.mkdirs(new Path(path)))
  62.             return 0;
  63.         return -1;
  64.     }
  65.     public int rename(String source, String dest) throws IOException {
  66.         if (localFS.rename(new Path(source), new Path(dest)))
  67.             return 0;
  68.         return -1;
  69.     }
  70.     public int rmdir(String path) throws IOException {
  71.         if (isDirectory(path)) {
  72.             // the directory better be empty
  73.             String[] dirEntries = readdir(path);
  74.             if ((dirEntries.length <= 2) && (localFS.delete(new Path(path), true)))
  75.                 return 0;
  76.         }
  77.         return -1;
  78.     }
  79.     public int remove(String path) throws IOException {
  80.         if (isFile(path) && (localFS.delete(new Path(path), true)))
  81.             return 0;
  82.         return -1;
  83.     }
  84.     public long filesize(String path) throws IOException {
  85.         return localFS.getLength(new Path(path));
  86.     }
  87.     public short getReplication(String path) throws IOException {
  88.         return 1;
  89.     }
  90.     public short setReplication(String path, short replication) throws IOException {
  91.         return 1;
  92.     }
  93.     public String[][] getDataLocation(String path, long start, long len) throws IOException {
  94.         BlockLocation[] blkLocations = 
  95.           localFS.getFileBlockLocations(localFS.getFileStatus(new Path(path)),
  96.               start, len);
  97.           if ((blkLocations == null) || (blkLocations.length == 0)) {
  98.             return new String[0][];     
  99.           }
  100.           int blkCount = blkLocations.length;
  101.           String[][]hints = new String[blkCount][];
  102.           for (int i=0; i < blkCount ; i++) {
  103.             String[] hosts = blkLocations[i].getHosts();
  104.             hints[i] = new String[hosts.length];
  105.             hints[i] = hosts;
  106.           }
  107.           return hints;
  108.     }
  109.     public long getModificationTime(String path) throws IOException {
  110.         FileStatus s = localFS.getFileStatus(new Path(path));
  111.         if (s == null)
  112.             return 0;
  113.         return s.getModificationTime();
  114.     }
  115.     public FSDataOutputStream create(String path, short replication, int bufferSize) throws IOException {
  116.         // besides path/overwrite, the other args don't matter for
  117.         // testing purposes.
  118.         return localFS.create(new Path(path));
  119.     }
  120.     public FSDataInputStream open(String path, int bufferSize) throws IOException {
  121.         return localFS.open(new Path(path));
  122.     }
  123.     
  124. };