TestDistributedCache.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:3k
- package org.apache.hadoop.filecache;
- import java.io.IOException;
- import java.net.URI;
- import java.util.Random;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FSDataOutputStream;
- import org.apache.hadoop.fs.FileStatus;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
- import junit.framework.TestCase;
- public class TestDistributedCache extends TestCase {
-
- static final URI LOCAL_FS = URI.create("file:///");
- private static String TEST_CACHE_BASE_DIR =
- new Path(System.getProperty("test.build.data","/tmp/cachebasedir"))
- .toString().replace(' ', '+');
- private static String TEST_ROOT_DIR =
- System.getProperty("test.build.data", "/tmp/distributedcache");
- private static final int TEST_FILE_SIZE = 4 * 1024; // 4K
- private static final int LOCAL_CACHE_LIMIT = 5 * 1024; //5K
- private Configuration conf;
- private Path firstCacheFile;
- private Path secondCacheFile;
- private FileSystem localfs;
-
- /**
- * @see TestCase#setUp()
- */
- @Override
- protected void setUp() throws IOException {
- conf = new Configuration();
- conf.setLong("local.cache.size", LOCAL_CACHE_LIMIT);
- localfs = FileSystem.get(LOCAL_FS, conf);
- firstCacheFile = new Path(TEST_ROOT_DIR+"/firstcachefile");
- secondCacheFile = new Path(TEST_ROOT_DIR+"/secondcachefile");
- createTempFile(localfs, firstCacheFile);
- createTempFile(localfs, secondCacheFile);
- }
-
- /** test delete cache */
- public void testDeleteCache() throws Exception {
- DistributedCache.getLocalCache(firstCacheFile.toUri(), conf, new Path(TEST_CACHE_BASE_DIR),
- false, System.currentTimeMillis(), new Path(TEST_ROOT_DIR));
- DistributedCache.releaseCache(firstCacheFile.toUri(), conf);
- //in above code,localized a file of size 4K and then release the cache which will cause the cache
- //be deleted when the limit goes out. The below code localize another cache which's designed to
- //sweep away the first cache.
- DistributedCache.getLocalCache(secondCacheFile.toUri(), conf, new Path(TEST_CACHE_BASE_DIR),
- false, System.currentTimeMillis(), new Path(TEST_ROOT_DIR));
- FileStatus[] dirStatuses = localfs.listStatus(new Path(TEST_CACHE_BASE_DIR));
- assertTrue("DistributedCache failed deleting old cache when the cache store is full.",
- dirStatuses.length > 1);
- }
- private void createTempFile(FileSystem fs, Path p) throws IOException {
- FSDataOutputStream out = fs.create(p);
- byte[] toWrite = new byte[TEST_FILE_SIZE];
- new Random().nextBytes(toWrite);
- out.write(toWrite);
- out.close();
- FileSystem.LOG.info("created: " + p + ", size=" + TEST_FILE_SIZE);
- }
-
- /**
- * @see TestCase#tearDown()
- */
- @Override
- protected void tearDown() throws IOException {
- localfs.delete(firstCacheFile, true);
- localfs.delete(secondCacheFile, true);
- localfs.close();
- }
- }