package com.neverwinterdp.vm.client; import java.util.Map; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.yarn.conf.YarnConfiguration; import com.neverwinterdp.registry.Registry; import com.neverwinterdp.vm.HadoopProperties; import com.neverwinterdp.vm.VMConfig; import com.neverwinterdp.vm.environment.yarn.AppClient; import com.neverwinterdp.vm.environment.yarn.YarnVMServicePlugin; import com.neverwinterdp.vm.service.VMServiceApp; import com.neverwinterdp.vm.service.VMServicePlugin; public class YarnVMClient extends VMClient { private HadoopProperties hadoopProperties ; private Configuration conf ; private VMConfig.Environment yarnEnv = VMConfig.Environment.YARN_MINICLUSTER ; private String localAppHome = "."; private String dfsAppHome = "/VM" ; public YarnVMClient(Registry registry, VMConfig.Environment yarnEnv, HadoopProperties hadoopProps) { super(registry); this.yarnEnv = yarnEnv; this.hadoopProperties = hadoopProps; conf = new Configuration() ; for(Map.Entry<String, String> entry : hadoopProps.entrySet()) { conf.set(entry.getKey(), entry.getValue()); } } public YarnVMClient(Registry registry, HadoopProperties hadoopProps, Configuration conf) { super(registry); this.hadoopProperties = hadoopProps; this.conf = conf ; } public void setDFSAppHome(String home) { this.dfsAppHome = home; } public void setLocalAppHome(String home) { this.localAppHome = home; } @Override public void createVMMaster(String name) throws Exception { VMConfig vmConfig = new VMConfig() ; vmConfig.setName(name); vmConfig.addRoles("vm-master") ; vmConfig.setSelfRegistration(true) ; vmConfig.setRegistryConfig(getRegistry().getRegistryConfig()); vmConfig.setVmApplication(VMServiceApp.class.getName()) ; vmConfig.addProperty("implementation:" + VMServicePlugin.class.getName(), YarnVMServicePlugin.class.getName()) ; configureEnvironment(vmConfig); AppClient appClient = new AppClient(vmConfig.getHadoopProperties()) ; YarnConfiguration yarnConf = new YarnConfiguration(conf); for(Map.Entry<String, String> entry : hadoopProperties.entrySet()) { yarnConf.set(entry.getKey(), entry.getValue()); } appClient.uploadApp(localAppHome, dfsAppHome); vmConfig.setAppHome(dfsAppHome); vmConfig.addVMResource("dfs-app-lib", dfsAppHome + "/libs"); vmConfig.addVMResource("dfs-app-conf", dfsAppHome + "/conf"); appClient.run(vmConfig, yarnConf); } public void configureEnvironment(VMConfig vmConfig) { vmConfig.setEnvironment(yarnEnv); vmConfig.getHadoopProperties().putAll(hadoopProperties); } @Override public void uploadApp(String localAppHome, String appHome) throws Exception { AppClient appClient = new AppClient(hadoopProperties) ; appClient.uploadApp(localAppHome, appHome); System.out.println("YarnVMClient: upload " + localAppHome + " to " + appHome); } }