package clients; import api.MachineGroup; import api.ReservationService; import com.google.common.util.concurrent.ListenableFuture; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Key; import com.google.inject.name.Names; import edu.ucsb.jpregel.clouds.CloudMachineGroup; import edu.ucsb.jpregel.clouds.CloudReservationService; import edu.ucsb.jpregel.clouds.modules.AWSModule; import edu.ucsb.jpregel.system.*; import java.io.File; import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.util.concurrent.Future; import org.jclouds.ContextBuilder; import org.jclouds.apis.ApiMetadata; import org.jclouds.blobstore.AsyncBlobStore; import org.jclouds.blobstore.BlobStoreContext; import org.jclouds.blobstore.domain.Blob; import org.jclouds.ec2.domain.InstanceType; import org.jclouds.blobstore.options.PutOptions; import vertices.VertexShortestPathBinaryTree; /** * Problem: SSSP; Graph family: binary tree; Cloud: AWS. * @param args [0] directory name on S3 * [1] numbers of worker machines * [2] access key * [3] secret key * @author Charles */ public class BinaryTreeEc2Client { public static void main( String[] args ) throws Exception { int numWorkers = Integer.parseInt(args[1]); final AWSModule awsModule = new AWSModule(args[2], args[3]); new ObjectOutputStream( new FileOutputStream( new File(CloudMachineGroup.CREDENTIALS_MODULE))).writeObject(awsModule); Injector injector = Guice.createInjector(awsModule); CloudReservationService instance = (CloudReservationService)injector.getInstance(ReservationService.class); AsyncBlobStore context = new ContextBuilder( injector.getInstance(Key.get(ApiMetadata.class, Names.named("storage")))) .credentials( injector.getInstance(Key.get(String.class, Names.named("sAccess"))), injector.getInstance(Key.get(String.class, Names.named("sModify")))) .build(BlobStoreContext.class) .getAsyncBlobStore(); Blob build = context.blobBuilder(CloudMachineGroup.JARNAME).payload(CloudMachineGroup.jar).build(); System.out.println("Uploading jar to storage"); ListenableFuture<String> putBlob = context.putBlob(CloudMachineGroup.BUCKET_NAME, build, PutOptions.Builder.multipart()); Future<MachineGroup[]> m = instance.reserveBoth(InstanceType.CC2_8XLARGE, numWorkers); System.out.println("Blob submitted" + putBlob.get()); Future<ClientToMaster> frm = (Future<ClientToMaster>) m.get()[0].deploy(args[1]); //master m.get()[1].deploy(m.get()[0].getHostname()).get(); ClientToMaster rMaster = frm.get(); Job job3 = new Job("Binary Tree Shortest Path", // jobName args[0], new VertexShortestPathBinaryTree(), // vertexFactory new MasterGraphMakerBinaryTree(), new WorkerGraphMakerBinaryTree(), new MasterOutputMakerStandard(), new WorkerOutputMakerStandard()); for (int j = 0; j < 3; j++) { try { JobRunData run3 = rMaster.run(job3); System.out.println(run3); } catch (Exception e) { System.out.println("Exception running job"); System.out.println(e.getLocalizedMessage()); e.printStackTrace(System.out); continue; } break; } System.exit(0); } }