package com.neverwinterdp.scribengin.clusterBuilder; import java.io.File; import java.io.IOException; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FileUtil; import org.apache.hadoop.hdfs.MiniDFSCluster; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.server.MiniYARNCluster; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler; import com.neverwinterdp.scribengin.filesystem.AbstractFileSystemFactory; public class UnitTestCluster extends AbstractFileSystemFactory { private static UnitTestCluster inst = null; private MiniDFSCluster hdfsCluster = null; private String clusterPath = null; private UnitTestCluster (String clusterPath) { this.clusterPath = clusterPath; } public static UnitTestCluster instance(String clusterPath) { if (inst == null) inst = new UnitTestCluster(clusterPath); return inst; } public FileSystem build(int numMachines) throws IOException{ MiniDFSCluster miniCluster = createMiniDFSCluster(clusterPath, numMachines); FileSystem r = miniCluster.getFileSystem(); return r; } public FileSystem build() throws IOException { return build(1); } public String getUrl(){ return "hdfs://127.0.0.1:"+ hdfsCluster.getNameNodePort() + "/"; } public void destroy(){ try{ hdfsCluster.shutdown(); }catch(Exception e){} FileUtil.fullyDelete(new File(clusterPath).getAbsoluteFile()); } protected MiniYARNCluster createMiniYARNCluster(int numOfNodeManagers) throws Exception { return createMiniYARNCluster(new YarnConfiguration(), numOfNodeManagers) ; } protected MiniYARNCluster createMiniYARNCluster(Configuration yarnConf, int numOfNodeManagers) throws Exception { yarnConf.setInt(YarnConfiguration.RM_SCHEDULER_MINIMUM_ALLOCATION_MB, 64); yarnConf.setClass(YarnConfiguration.RM_SCHEDULER, FifoScheduler.class, ResourceScheduler.class); MiniYARNCluster miniYarnCluster = new MiniYARNCluster("yarn", numOfNodeManagers, 1, 1); miniYarnCluster.init(yarnConf); yarnConf.set("yarn.resourcemanager.scheduler.address", "0.0.0.0:8030") ; miniYarnCluster.start(); return miniYarnCluster ; } private MiniDFSCluster createMiniDFSCluster(String dir, int numDataNodes) throws IOException { return createMiniDFSCluster(new Configuration(), dir, numDataNodes) ; } private MiniDFSCluster createMiniDFSCluster(Configuration conf, String dir, int numDataNodes) throws IOException { if (this.hdfsCluster == null) { File baseDir = new File(dir).getAbsoluteFile(); FileUtil.fullyDelete(baseDir); conf.set(MiniDFSCluster.HDFS_MINIDFS_BASEDIR, baseDir.getAbsolutePath()); MiniDFSCluster _hdfsCluster = new MiniDFSCluster.Builder(conf). numDataNodes(numDataNodes). build(); _hdfsCluster.waitClusterUp(); this.hdfsCluster = _hdfsCluster; } return this.hdfsCluster; } @Override public FileSystem build(URI uri) throws IOException { return this.build(); } }