All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.spotinst.sdkjava.example.mrScaler.aws.MrScalerAwsUsageExample Maven / Gradle / Ivy

There is a newer version: 1.0.121
Show newest version
package com.spotinst.sdkjava.example.mrScaler.aws;

import com.spotinst.sdkjava.SpotinstClient;
import com.spotinst.sdkjava.client.rest.JsonMapper;
import com.spotinst.sdkjava.enums.AwsMrScalerStateEnum;
import com.spotinst.sdkjava.model.*;
import com.spotinst.sdkjava.model.api.mrScaler.aws.*;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class MrScalerAwsUsageExample {
    private final static String auth_token = "your-token";
    private final static String act_id     = "your-account-id";

    public static void main(String[] args) throws IOException {
        SpotinstMrScalerAwsClient mrScalerAwsClient = SpotinstClient.getMrScalerAwsClient(auth_token, act_id);

        System.out.println("Creating MrScaler");
        String mrScalerId = createMrScaler(mrScalerAwsClient);
        System.out.println("Creation Success: " + mrScalerId);

        System.out.println("Getting New MrScaler");
        getMrScaler(mrScalerAwsClient, mrScalerId);
        System.out.println("Get Singe Cluster Success");

        System.out.println("Get all MrScaler");
        getAllMrScaler(mrScalerAwsClient);
        System.out.println("Get All Success");

        System.out.println("Update MrScaler");
        updateMrScaler(mrScalerAwsClient, mrScalerId);
        System.out.println("Update Success: " + mrScalerId);

        System.out.println("Delete MrScaler");
        deleteMrScaler(mrScalerAwsClient, mrScalerId);
        System.out.println("Delete Success: " + mrScalerId);

        System.out.println("Creating MrScaler Operator");
        ApiMrScalerAws                 mrScalerForOperator = buildApiMrScalerAws();
        ApiMrScalerOperatorAwsResponse mrScalerOperator    =
                createMrScaleOperator(mrScalerAwsClient, mrScalerForOperator);
        AwsMrScalerStateEnum           mrScalerState       = mrScalerOperator.getState();
        String                         mrScalerOperatorId  = mrScalerOperator.getMrScalerId();

        System.out.println("Update MrScaler cached in MrScaler Operator");
        updateMrScaler(mrScalerAwsClient, mrScalerOperatorId);
        System.out.println("Update Success: " + mrScalerOperatorId);

        System.out.println("Creation Success: " + mrScalerOperatorId);
        System.out.println("MrScaler state: " + mrScalerState.getName());

        System.out.println("Delete MrScaler cached in MrScaler Operator");
        deleteMrScaler(mrScalerAwsClient, mrScalerOperatorId);
        System.out.println("Delete Success: " + mrScalerOperatorId);

    }

    public static String createMrScaler(SpotinstMrScalerAwsClient mrScalerAwsClient) {
        ApiMrScalerAws mrScalerRequest = buildApiMrScalerAws();

        System.out.println("Building MrScaler Creation Request");
        ApiMrScalerAwsCreationRequest.Builder mrScalerCreationRequestBuilder =
                ApiMrScalerAwsCreationRequest.Builder.get();

        ApiMrScalerAwsCreationRequest creationRequest =
                mrScalerCreationRequestBuilder.setMrScaler(mrScalerRequest).build();

        System.out.println(JsonMapper.toJson(creationRequest));

        System.out.println("Sending Request");
        ApiMrScalerAws mrScalerResponse = mrScalerAwsClient.createMrScaler(creationRequest);

        System.out.println("Request Success: ");
        System.out.println(JsonMapper.toJson(mrScalerResponse));

        return mrScalerResponse.getId();
    }

    public static ApiMrScalerAws buildApiMrScalerAws() {
        System.out.println("Building Scheduling Parameters");
        List   tasks       = new ArrayList<>();
        ApiMrScalerAwsTask.Builder taskBuilder = ApiMrScalerAwsTask.Builder.get();
        ApiMrScalerAwsTask task =
                taskBuilder.setCronExpression("cron").setInstanceGroupType("instnace").setIsEnabled(true)
                           .setMaxCapacity(0).setMinCapacity(0).setTargetCapacity(0).setTaskType("type").build();
        tasks.add(task);

        ApiMrScalerAwsSchedulingConfiguration.Builder schedulingBuilder =
                ApiMrScalerAwsSchedulingConfiguration.Builder.get();
        ApiMrScalerAwsSchedulingConfiguration scheduling = schedulingBuilder.setTasks(tasks).build();

        System.out.println("End Building Scheduling Params");
        System.out.println(JsonMapper.toJson(scheduling));


        System.out.println("Building Scaling Parameters");
        List   dimList    = new ArrayList<>();
        ApiMrScalerAwsScalingDimenation.Builder dimBuilder = ApiMrScalerAwsScalingDimenation.Builder.get();
        ApiMrScalerAwsScalingDimenation         dim        = dimBuilder.setName("name").setValue("value").build();
        dimList.add(dim);

        ApiMrScalerAwsScalingAction.Builder actionBuilder = ApiMrScalerAwsScalingAction.Builder.get();

        ApiMrScalerAwsScalingAction scalingAction = actionBuilder.setAdjustment(2).setType("adjustment").build();


        List uppolicies = new ArrayList<>();

        ApiMrScalerAwsScalingPolicy.Builder policyBuilder = ApiMrScalerAwsScalingPolicy.Builder.get();

        ApiMrScalerAwsScalingPolicy scaleuppolicy = policyBuilder.setAction(scalingAction).setCooldown(300)

                                                                 .setDimensions(dimList).setMetricName("test")

                                                                 .setNamespace("AWS").setOperator("lte").setPeriod(300)
                                                                 .setEvaluationPeriods(1)

                                                                 .setPolicyName("scaleUpPolicy").setStatistic("average")
                                                                 .setUnit("percent").setThreshold(20).build();

        uppolicies.add(scaleuppolicy);


        List   downPolicies   = new ArrayList<>();
        ApiMrScalerAwsScalingPolicy.Builder policyBuilder3 = ApiMrScalerAwsScalingPolicy.Builder.get();
        ApiMrScalerAwsScalingPolicy scaleDownPolicy =
                policyBuilder3.setAction(scalingAction).setCooldown(300).setDimensions(dimList)
                              .setMetricName("YARNMemoryAvailablePercentage").setNamespace("AWS/ElasticMapReduce")
                              .setOperator("gte").setPeriod(300).setEvaluationPeriods(1).setPolicyName("scaleuppolicy")
                              .setStatistic("average").setUnit("percent").setThreshold(90).build();
        downPolicies.add(scaleDownPolicy);

        ApiMrScalerAwsScalingConfiguration.Builder scalingBuilder = ApiMrScalerAwsScalingConfiguration.Builder.get();

        ApiMrScalerAwsScalingConfiguration scaling = scalingBuilder.setDown(downPolicies).setUp(uppolicies).build();

        System.out.println("End Building Scaling Params");
        System.out.println(JsonMapper.toJson(scaling));


        System.out.println("Building Cluster Parameters");
        ApiMrScalerAwsClusterConfiguration.Builder clusterBuilder = ApiMrScalerAwsClusterConfiguration.Builder.get();
        ApiMrScalerAwsClusterConfiguration cluster =
                clusterBuilder.setTerminationProtected(true).setVisibleToAllUsers(true).build();
        System.out.println("End Building Cluster Params");
        System.out.println(JsonMapper.toJson(cluster));


        System.out.println("Building Compute Parameters");
        ApiMrScalerAwsFileParams.Builder fileParamsBuilder = ApiMrScalerAwsFileParams.Builder.get();
        ApiMrScalerAwsFileParams fileParams = fileParamsBuilder.setBucket("test-bucket").setKey("test-key").build();

        ApiMrScalerAwsFile.Builder fileBuilder = ApiMrScalerAwsFile.Builder.get();
        ApiMrScalerAwsFile         file        = fileBuilder.setFile(fileParams).build();

        Tag.Builder tagBuilder = Tag.Builder.get();
        Tag         tag        = tagBuilder.setTagKey("test-key").setTagValue("test-value").build();
        List   tags       = new ArrayList<>();
        tags.add(tag);

        List additionalSec = new ArrayList<>();
        additionalSec.add("m3.xlarge");

        ApiMrScalerAwsApplication.Builder applicationBuilder = ApiMrScalerAwsApplication.Builder.get();
        ApiMrScalerAwsApplication         application        =
                applicationBuilder.setName("app-name").setVersion("app-verion").build();

        List appList = new ArrayList<>();
        appList.add(application);

        AvailabilityZone.Builder azBuilder = AvailabilityZone.Builder.get();
        AvailabilityZone         az        = azBuilder.setName("us-west-2a").setSubnetId("subnet-4333093a").build();

        List availabilityZones = new ArrayList<>();
        availabilityZones.add(az);

        ApiMrScalerAwsVolumeSpecification.Builder volumeBuilder = ApiMrScalerAwsVolumeSpecification.Builder.get();
        ApiMrScalerAwsVolumeSpecification volume =
                volumeBuilder.setIops(1).setSizeInGb(1).setVolumeType("volume-type").build();

        ApiMrScalerAwsEbsBlockDeviceConfig.Builder configBuilder = ApiMrScalerAwsEbsBlockDeviceConfig.Builder.get();
        ApiMrScalerAwsEbsBlockDeviceConfig singleConfig =
                configBuilder.setVolumeSpecification(volume).setVolumesPerInstance(1).build();

        List blockList = new ArrayList<>();
        blockList.add(singleConfig);

        ElastigroupCapacityConfiguration.Builder capacityBuilder = ElastigroupCapacityConfiguration.Builder.get();
        ElastigroupCapacityConfiguration         capacity        =
                capacityBuilder.setMaximum(1).setMinimum(0).setTarget(1).build();


        ApiMrScalerAwsEbsConfiguration.Builder ebsBuilder = ApiMrScalerAwsEbsConfiguration.Builder.get();
        ApiMrScalerAwsEbsConfiguration         ebs        = ebsBuilder.setEbsOptimized(true).build();

        ApiMrScalerAwsMasterGroup.Builder masterGroupBuilder = ApiMrScalerAwsMasterGroup.Builder.get();
        ApiMrScalerAwsMasterGroup masterGroup =
                masterGroupBuilder.setInstanceTypes(additionalSec).setTarget(1).setLifeCycle("ON_DEMAND").build();

        ApiMrScalerAwsCoreGroup.Builder coreGroupBuilder = ApiMrScalerAwsCoreGroup.Builder.get();
        ApiMrScalerAwsCoreGroup coreGroup =
                coreGroupBuilder.setCapacity(capacity).setInstanceTypes(additionalSec).setLifeCycle("SPOT").setTarget(1)
                                .build();

        ApiMrScalerAwsTaskGroup.Builder taskGroupBuilder = ApiMrScalerAwsTaskGroup.Builder.get();
        ApiMrScalerAwsTaskGroup taskgroup =
                taskGroupBuilder.setCapacity(capacity).setInstanceTypes(additionalSec).setLifeCycle("SPOT").build();


        ApiMrScalerAwsInstancegroups.Builder instanceGroupsBuilder = ApiMrScalerAwsInstancegroups.Builder.get();
        ApiMrScalerAwsInstancegroups instancegroups =
                instanceGroupsBuilder.setMasterGroup(masterGroup).setCoreGroup(coreGroup).setTaskGroup(taskgroup)
                                     .build();

        ApiMrScalerAwsComputeConfiguration.Builder computeBuilder = ApiMrScalerAwsComputeConfiguration.Builder.get();
        ApiMrScalerAwsComputeConfiguration compute =
                computeBuilder.setInstanceGroups(instancegroups).setAvailabilityZones(availabilityZones).build();
        System.out.println("End Building Copmute Params");
        System.out.println(JsonMapper.toJson(compute));


        System.out.println("Building Strategy Parameters");
        ApiMrScalerAwsProvisioningTimeout.Builder ptBuilder = ApiMrScalerAwsProvisioningTimeout.Builder.get();
        ApiMrScalerAwsProvisioningTimeout pt = ptBuilder.setTimeout(1).setTimeoutAction("test-action").build();

        ApiMrScalerAwsWrapStrategy.Builder wrapBuilder = ApiMrScalerAwsWrapStrategy.Builder.get();
        ApiMrScalerAwsWrapStrategy         wrap        = wrapBuilder.setSourceClusterId("test-source-id").build();

        ApiMrScalerAwsNewStrategy.Builder newBuilder = ApiMrScalerAwsNewStrategy.Builder.get();
        ApiMrScalerAwsNewStrategy         newing     = newBuilder.setReleaseLabel("emr-5.17.0").build();

        ApiMrScalerAwsCloneStrategy.Builder cloneBuilder = ApiMrScalerAwsCloneStrategy.Builder.get();
        ApiMrScalerAwsCloneStrategy clone =
                cloneBuilder.setOriginClusterId("test-id").setIncludeSteps(true).setNumberOfRetries(1).build();

        ApiMrScalerAwsStrategyConfiguration.Builder strategyBuilder = ApiMrScalerAwsStrategyConfiguration.Builder.get();
        ApiMrScalerAwsStrategyConfiguration         strategy        = strategyBuilder.setNew(newing).build();
        System.out.println("End Building Strategy Params");
        System.out.println(JsonMapper.toJson(strategy));


        System.out.println("Building All Parameters");
        ApiMrScalerAws.Builder mrScalerBuilder = ApiMrScalerAws.Builder.get();

        ApiMrScalerAws mrScalerRequest =
                mrScalerBuilder.setName("Java SDK Test").setRegion("us-west-2").setDescription("description-test")
                               .setStrategy(strategy).setCompute(compute).setCluster(cluster).setScaling(scaling)
                               .build();
        System.out.println(JsonMapper.toJson(mrScalerRequest));
        return mrScalerRequest;
    }

    public static void updateMrScaler(SpotinstMrScalerAwsClient mrScalerAwsClient, String mrScalerId) {
        System.out.println("Building Cluster Parameters");
        ApiMrScalerAwsClusterConfiguration.Builder clusterBuilder = ApiMrScalerAwsClusterConfiguration.Builder.get();
        ApiMrScalerAwsClusterConfiguration cluster =
                clusterBuilder.setTerminationProtected(false).setVisibleToAllUsers(true).build();
        System.out.println("End Building Cluster Params");
        System.out.println(JsonMapper.toJson(cluster));

        System.out.println("Building All Parameters");
        ApiMrScalerAws.Builder mrScalerBuilder = ApiMrScalerAws.Builder.get();
        ApiMrScalerAws         mrScalerRequest = mrScalerBuilder.setCluster(cluster).build();
        System.out.println(JsonMapper.toJson(mrScalerRequest));

        ApiMrScalerAwsUpdateRequest.Builder updateBuilder = ApiMrScalerAwsUpdateRequest.Builder.get();
        ApiMrScalerAwsUpdateRequest         updateRequest = updateBuilder.setMrScaler(mrScalerRequest).build();

        System.out.println("Sending Request");
        Boolean mrScalerUpdateResponse = mrScalerAwsClient.updateMrScaler(updateRequest, mrScalerId);

        System.out.println("Update Status: " + mrScalerUpdateResponse);
    }

    public static void deleteMrScaler(SpotinstMrScalerAwsClient mrScalerAwsClient, String mrScalerId) {
        ApiMrScalerAwsDeleteRequest.Builder deleteBuilder = ApiMrScalerAwsDeleteRequest.Builder.get();
        ApiMrScalerAwsDeleteRequest         delete        = deleteBuilder.setMrScalerId(mrScalerId).build();

        System.out.println("Sending Request");
        Boolean deleteRes = mrScalerAwsClient.deleteMrScaler(delete);
        System.out.println("Delete Status: " + deleteRes);
    }

    public static void getMrScaler(SpotinstMrScalerAwsClient mrScalerAwsClient, String mrScalerId) {
        ApiMrScalerAwsGetRequest.Builder getBuilder = ApiMrScalerAwsGetRequest.Builder.get();
        ApiMrScalerAwsGetRequest         get        = getBuilder.setMrScalerId(mrScalerId).build();

        System.out.println("Sending Request");
        ApiMrScalerAws getRes = mrScalerAwsClient.getMrScaler(get);
        System.out.println("get Success");
        System.out.println(JsonMapper.toJson(getRes));
    }

    public static void getAllMrScaler(SpotinstMrScalerAwsClient mrScalerAwsClient) {
        System.out.println("Sending Request");
        List getRes = mrScalerAwsClient.getAllMrScalers();
        System.out.println("get all Success");
        System.out.println(JsonMapper.toJson(getRes));
    }

    public static ApiMrScalerOperatorAwsResponse createMrScaleOperator(SpotinstMrScalerAwsClient mrScalerAwsClient,
                                                                       ApiMrScalerAws mrScalerAws) {
        System.out.println("Building MrScaler Operator");
        ApiMrScalerOperatorAws.Builder mrScalerOperatorBuilder = ApiMrScalerOperatorAws.Builder.get();

        ApiMrScalerOperatorAws mrScalerOperator =
                mrScalerOperatorBuilder.setName("Java-SDK-MrScaler-Operator-Test").setMrScaler(mrScalerAws).build();
        System.out.println(JsonMapper.toJson(mrScalerOperator));

        System.out.println("Building MrScaler Operator Creation Request");
        ApiMrScalerOperatorAwsRequest.Builder mrScalerOperatorRequestBuilder =
                ApiMrScalerOperatorAwsRequest.Builder.get();

        ApiMrScalerOperatorAwsRequest operatorCreationRequest =
                mrScalerOperatorRequestBuilder.setMrScalerOperator(mrScalerOperator).build();

        System.out.println(JsonMapper.toJson(operatorCreationRequest));

        System.out.println("Sending Request");
        ApiMrScalerOperatorAwsResponse mrScalerOperatorResponse =
                mrScalerAwsClient.createMrScalerOperator(operatorCreationRequest);

        System.out.println("Request Success: ");
        System.out.println(JsonMapper.toJson(mrScalerOperatorResponse));

        return mrScalerOperatorResponse;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy