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

网格计算

开发平台:

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.hdfs;
  19. import java.io.IOException;
  20. import java.net.URI;
  21. import java.util.Random;
  22. import org.apache.commons.logging.impl.Log4JLogger;
  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.FileChecksum;
  27. import org.apache.hadoop.fs.FileSystem;
  28. import org.apache.hadoop.fs.Path;
  29. import org.apache.log4j.Level;
  30. public class TestDistributedFileSystem extends junit.framework.TestCase {
  31.   private static final Random RAN = new Random();
  32.   public void testFileSystemCloseAll() throws Exception {
  33.     Configuration conf = new Configuration();
  34.     MiniDFSCluster cluster = new MiniDFSCluster(conf, 0, true, null);
  35.     URI address = FileSystem.getDefaultUri(conf);
  36.     try {
  37.       FileSystem.closeAll();
  38.       conf = new Configuration();
  39.       FileSystem.setDefaultUri(conf, address);
  40.       FileSystem.get(conf);
  41.       FileSystem.get(conf);
  42.       FileSystem.closeAll();
  43.     }
  44.     finally {
  45.       if (cluster != null) {cluster.shutdown();}
  46.     }
  47.   }
  48.   
  49.   /**
  50.    * Tests DFSClient.close throws no ConcurrentModificationException if 
  51.    * multiple files are open.
  52.    */
  53.   public void testDFSClose() throws Exception {
  54.     Configuration conf = new Configuration();
  55.     MiniDFSCluster cluster = new MiniDFSCluster(conf, 2, true, null);
  56.     FileSystem fileSys = cluster.getFileSystem();
  57.     try {
  58.       // create two files
  59.       fileSys.create(new Path("/test/dfsclose/file-0"));
  60.       fileSys.create(new Path("/test/dfsclose/file-1"));
  61.       fileSys.close();
  62.     }
  63.     finally {
  64.       if (cluster != null) {cluster.shutdown();}
  65.     }
  66.   }
  67.   public void testDFSClient() throws Exception {
  68.     Configuration conf = new Configuration();
  69.     MiniDFSCluster cluster = null;
  70.     try {
  71.       cluster = new MiniDFSCluster(conf, 2, true, null);
  72.       final Path filepath = new Path("/test/LeaseChecker/foo");
  73.       final long millis = System.currentTimeMillis();
  74.       {
  75.         DistributedFileSystem dfs = (DistributedFileSystem)cluster.getFileSystem();
  76.         assertFalse(dfs.dfs.isLeaseCheckerStarted());
  77.   
  78.         //create a file
  79.         FSDataOutputStream out = dfs.create(filepath);
  80.         assertTrue(dfs.dfs.isLeaseCheckerStarted());
  81.   
  82.         //write something and close
  83.         out.writeLong(millis);
  84.         assertTrue(dfs.dfs.isLeaseCheckerStarted());
  85.         out.close();
  86.         assertTrue(dfs.dfs.isLeaseCheckerStarted());
  87.         dfs.close();
  88.       }
  89.       {
  90.         DistributedFileSystem dfs = (DistributedFileSystem)cluster.getFileSystem();
  91.         assertFalse(dfs.dfs.isLeaseCheckerStarted());
  92.         //open and check the file
  93.         FSDataInputStream in = dfs.open(filepath);
  94.         assertFalse(dfs.dfs.isLeaseCheckerStarted());
  95.         assertEquals(millis, in.readLong());
  96.         assertFalse(dfs.dfs.isLeaseCheckerStarted());
  97.         in.close();
  98.         assertFalse(dfs.dfs.isLeaseCheckerStarted());
  99.         dfs.close();
  100.       }
  101.     }
  102.     finally {
  103.       if (cluster != null) {cluster.shutdown();}
  104.     }
  105.   }
  106.   
  107.   public void testFileChecksum() throws IOException {
  108.     ((Log4JLogger)HftpFileSystem.LOG).getLogger().setLevel(Level.ALL);
  109.     final long seed = RAN.nextLong();
  110.     System.out.println("seed=" + seed);
  111.     RAN.setSeed(seed);
  112.     final Configuration conf = new Configuration();
  113.     conf.set("slave.host.name", "localhost");
  114.     final MiniDFSCluster cluster = new MiniDFSCluster(conf, 2, true, null);
  115.     final FileSystem hdfs = cluster.getFileSystem();
  116.     final String hftpuri = "hftp://" + conf.get("dfs.http.address");
  117.     System.out.println("hftpuri=" + hftpuri);
  118.     final FileSystem hftp = new Path(hftpuri).getFileSystem(conf);
  119.     final String dir = "/filechecksum";
  120.     final int block_size = 1024;
  121.     final int buffer_size = conf.getInt("io.file.buffer.size", 4096);
  122.     conf.setInt("io.bytes.per.checksum", 512);
  123.     //try different number of blocks
  124.     for(int n = 0; n < 5; n++) {
  125.       //generate random data
  126.       final byte[] data = new byte[RAN.nextInt(block_size/2-1)+n*block_size+1];
  127.       RAN.nextBytes(data);
  128.       System.out.println("data.length=" + data.length);
  129.   
  130.       //write data to a file
  131.       final Path foo = new Path(dir, "foo" + n);
  132.       {
  133.         final FSDataOutputStream out = hdfs.create(foo, false, buffer_size,
  134.             (short)2, block_size);
  135.         out.write(data);
  136.         out.close();
  137.       }
  138.       
  139.       //compute checksum
  140.       final FileChecksum hdfsfoocs = hdfs.getFileChecksum(foo);
  141.       System.out.println("hdfsfoocs=" + hdfsfoocs);
  142.       
  143.       final FileChecksum hftpfoocs = hftp.getFileChecksum(foo);
  144.       System.out.println("hftpfoocs=" + hftpfoocs);
  145.       //write another file
  146.       final Path bar = new Path(dir, "bar" + n);
  147.       {
  148.         final FSDataOutputStream out = hdfs.create(bar, false, buffer_size,
  149.             (short)2, block_size);
  150.         out.write(data);
  151.         out.close();
  152.       }
  153.   
  154.       { //verify checksum
  155.         final FileChecksum barcs = hdfs.getFileChecksum(bar);
  156.         final int barhashcode = barcs.hashCode();
  157.         assertEquals(hdfsfoocs.hashCode(), barhashcode);
  158.         assertEquals(hdfsfoocs, barcs);
  159.         assertEquals(hftpfoocs.hashCode(), barhashcode);
  160.         assertEquals(hftpfoocs, barcs);
  161.       }
  162.     }
  163.   }
  164. }