ClusterArgs

data class ClusterArgs(val bootstrapActions: Output<List<ClusterBootstrapActionArgs>>? = null, val chargeType: Output<String>? = null, val clusterType: Output<String>? = null, val configs: Output<List<ClusterConfigArgs>>? = null, val depositType: Output<String>? = null, val easEnable: Output<Boolean>? = null, val emrVer: Output<String>? = null, val highAvailabilityEnable: Output<Boolean>? = null, val hostGroups: Output<List<ClusterHostGroupArgs>>? = null, val isOpenPublicIp: Output<Boolean>? = null, val keyPairName: Output<String>? = null, val masterPwd: Output<String>? = null, val metaStoreConf: Output<ClusterMetaStoreConfArgs>? = null, val metaStoreType: Output<String>? = null, val modifyClusterServiceConfig: Output<ClusterModifyClusterServiceConfigArgs>? = null, val name: Output<String>? = null, val optionSoftwareLists: Output<List<String>>? = null, val period: Output<Int>? = null, val relatedClusterId: Output<String>? = null, val resourceGroupId: Output<String>? = null, val securityGroupId: Output<String>? = null, val sshEnable: Output<Boolean>? = null, val tags: Output<Map<String, Any>>? = null, val useLocalMetadb: Output<Boolean>? = null, val userDefinedEmrEcsRole: Output<String>? = null, val vswitchId: Output<String>? = null, val zoneId: Output<String>? = null) : ConvertibleToJava<ClusterArgs>

Provides a EMR Cluster resource. With this you can create, read, and release EMR Cluster.

NOTE: Available in 1.57.0+.

Example Usage

1. Create A Cluster

package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.alicloud.emr.EmrFunctions;
import com.pulumi.alicloud.emr.inputs.GetMainVersionsArgs;
import com.pulumi.alicloud.emr.inputs.GetInstanceTypesArgs;
import com.pulumi.alicloud.emr.inputs.GetDiskTypesArgs;
import com.pulumi.alicloud.vpc.Network;
import com.pulumi.alicloud.vpc.NetworkArgs;
import com.pulumi.alicloud.ecs.SecurityGroup;
import com.pulumi.alicloud.ecs.SecurityGroupArgs;
import com.pulumi.alicloud.vpc.Switch;
import com.pulumi.alicloud.vpc.SwitchArgs;
import com.pulumi.alicloud.ram.Role;
import com.pulumi.alicloud.ram.RoleArgs;
import com.pulumi.alicloud.emr.Cluster;
import com.pulumi.alicloud.emr.ClusterArgs;
import com.pulumi.alicloud.emr.inputs.ClusterHostGroupArgs;
import com.pulumi.codegen.internal.KeyedValue;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var defaultMainVersions = EmrFunctions.getMainVersions();
final var defaultInstanceTypes = EmrFunctions.getInstanceTypes(GetInstanceTypesArgs.builder()
.destinationResource("InstanceType")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.supportLocalStorage(false)
.instanceChargeType("PostPaid")
.supportNodeTypes(
"MASTER",
"CORE",
"TASK")
.build());
final var dataDisk = EmrFunctions.getDiskTypes(GetDiskTypesArgs.builder()
.destinationResource("DataDisk")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.instanceChargeType("PostPaid")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.build());
final var systemDisk = EmrFunctions.getDiskTypes(GetDiskTypesArgs.builder()
.destinationResource("SystemDisk")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.instanceChargeType("PostPaid")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.build());
for (var i = 0; i < (var_.vpc_id() == "" ? 1 : 0 == true); i++) {
new Network("vpc-" + i, NetworkArgs.builder()
.cidrBlock(var_.vpc_cidr())
.build());
}
for (var i = 0; i < (var_.security_group_id() == "" ? 1 : 0 == true); i++) {
new SecurityGroup("defaultSecurityGroup-" + i, SecurityGroupArgs.builder()
.vpcId(var_.vpc_id() == "" ? vpc.id() : var_.vpc_id())
.build());
}
for (var i = 0; i < (var_.vswitch_id() == "" ? 1 : 0 == true); i++) {
new Switch("vswitch-" + i, SwitchArgs.builder()
.availabilityZone(var_.availability_zone() == "" ? defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()) : var_.availability_zone())
.vswitchName(var_.vswitch_name())
.cidrBlock(var_.vswitch_cidr())
.vpcId(var_.vpc_id() == "" ? vpc.id() : var_.vpc_id())
.build());
}
var defaultRole = new Role("defaultRole", RoleArgs.builder()
.document("""
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"emr.aliyuncs.com",
"ecs.aliyuncs.com"
]
}
}
],
"Version": "1"
}
""")
.description("this is a role test.")
.force(true)
.build());
var defaultCluster = new Cluster("defaultCluster", ClusterArgs.builder()
.emrVer(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].emrVersion()))
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.hostGroups(
ClusterHostGroupArgs.builder()
.hostGroupName("master_group")
.hostGroupType("MASTER")
.nodeCount("2")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("1")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build(),
ClusterHostGroupArgs.builder()
.hostGroupName("core_group")
.hostGroupType("CORE")
.nodeCount("3")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("4")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build(),
ClusterHostGroupArgs.builder()
.hostGroupName("task_group")
.hostGroupType("TASK")
.nodeCount("2")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("4")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build())
.highAvailabilityEnable(true)
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.securityGroupId(var_.security_group_id() == "" ? defaultSecurityGroup.id() : var_.security_group_id())
.isOpenPublicIp(true)
.chargeType("PostPaid")
.vswitchId(var_.vswitch_id() == "" ? vswitch.id() : var_.vswitch_id())
.userDefinedEmrEcsRole(defaultRole.name())
.sshEnable(true)
.masterPwd("ABCtest1234!")
.build());
}
}

2. Scale Up

The hosts of EMR Cluster are orginized as host group. Scaling up/down is operating host group. In the case of scaling up cluster, we should add the node_count of some host group.

NOTE: Scaling up is only applicable to CORE and TASK group. Cost time of scaling up will vary with the number of scaling-up nodes. Scaling down is only applicable to TASK group. If you want to scale down CORE group, please submit tickets or contact EMR support team. As the following case, we scale up the TASK group 2 nodes by increasing host_group.node_count by 2.

package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.alicloud.emr.EmrFunctions;
import com.pulumi.alicloud.emr.inputs.GetMainVersionsArgs;
import com.pulumi.alicloud.emr.inputs.GetInstanceTypesArgs;
import com.pulumi.alicloud.emr.inputs.GetDiskTypesArgs;
import com.pulumi.alicloud.vpc.Network;
import com.pulumi.alicloud.vpc.NetworkArgs;
import com.pulumi.alicloud.ecs.SecurityGroup;
import com.pulumi.alicloud.ecs.SecurityGroupArgs;
import com.pulumi.alicloud.vpc.Switch;
import com.pulumi.alicloud.vpc.SwitchArgs;
import com.pulumi.alicloud.ram.Role;
import com.pulumi.alicloud.ram.RoleArgs;
import com.pulumi.alicloud.emr.Cluster;
import com.pulumi.alicloud.emr.ClusterArgs;
import com.pulumi.alicloud.emr.inputs.ClusterHostGroupArgs;
import com.pulumi.codegen.internal.KeyedValue;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var defaultMainVersions = EmrFunctions.getMainVersions();
final var defaultInstanceTypes = EmrFunctions.getInstanceTypes(GetInstanceTypesArgs.builder()
.destinationResource("InstanceType")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.supportLocalStorage(false)
.instanceChargeType("PostPaid")
.supportNodeTypes(
"MASTER",
"CORE",
"TASK")
.build());
final var dataDisk = EmrFunctions.getDiskTypes(GetDiskTypesArgs.builder()
.destinationResource("DataDisk")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.instanceChargeType("PostPaid")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.build());
final var systemDisk = EmrFunctions.getDiskTypes(GetDiskTypesArgs.builder()
.destinationResource("SystemDisk")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.instanceChargeType("PostPaid")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.build());
for (var i = 0; i < (var_.vpc_id() == "" ? 1 : 0 == true); i++) {
new Network("vpc-" + i, NetworkArgs.builder()
.cidrBlock(var_.vpc_cidr())
.build());
}
for (var i = 0; i < (var_.security_group_id() == "" ? 1 : 0 == true); i++) {
new SecurityGroup("defaultSecurityGroup-" + i, SecurityGroupArgs.builder()
.vpcId(var_.vpc_id() == "" ? vpc.id() : var_.vpc_id())
.build());
}
for (var i = 0; i < (var_.vswitch_id() == "" ? 1 : 0 == true); i++) {
new Switch("vswitch-" + i, SwitchArgs.builder()
.availabilityZone(var_.availability_zone() == "" ? defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()) : var_.availability_zone())
.vswitchName(var_.vswitch_name())
.cidrBlock(var_.vswitch_cidr())
.vpcId(var_.vpc_id() == "" ? vpc.id() : var_.vpc_id())
.build());
}
var defaultRole = new Role("defaultRole", RoleArgs.builder()
.document("""
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"emr.aliyuncs.com",
"ecs.aliyuncs.com"
]
}
}
],
"Version": "1"
}
""")
.description("this is a role test.")
.force(true)
.build());
var defaultCluster = new Cluster("defaultCluster", ClusterArgs.builder()
.emrVer(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].emrVersion()))
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.hostGroups(
ClusterHostGroupArgs.builder()
.hostGroupName("master_group")
.hostGroupType("MASTER")
.nodeCount("2")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("1")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build(),
ClusterHostGroupArgs.builder()
.hostGroupName("core_group")
.hostGroupType("CORE")
.nodeCount("3")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("4")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build(),
ClusterHostGroupArgs.builder()
.hostGroupName("task_group")
.hostGroupType("TASK")
.nodeCount("4")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("4")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build())
.highAvailabilityEnable(true)
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.securityGroupId(var_.security_group_id() == "" ? defaultSecurityGroup.id() : var_.security_group_id())
.isOpenPublicIp(true)
.chargeType("PostPaid")
.vswitchId(var_.vswitch_id() == "" ? vswitch.id() : var_.vswitch_id())
.userDefinedEmrEcsRole(defaultRole.name())
.sshEnable(true)
.masterPwd("ABCtest1234!")
.build());
}
}

3. Scale Down

In the case of scaling down a cluster, we need to specified the host group and the instance list.

NOTE: Graceful decommission of hadoop cluster has been supported Available in 1.168.0+. The following is an example. We scale down the cluster by decreasing the node count by 2, and specifying the scale-down instance list.

package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.alicloud.emr.EmrFunctions;
import com.pulumi.alicloud.emr.inputs.GetMainVersionsArgs;
import com.pulumi.alicloud.emr.inputs.GetInstanceTypesArgs;
import com.pulumi.alicloud.emr.inputs.GetDiskTypesArgs;
import com.pulumi.alicloud.vpc.Network;
import com.pulumi.alicloud.vpc.NetworkArgs;
import com.pulumi.alicloud.ecs.SecurityGroup;
import com.pulumi.alicloud.ecs.SecurityGroupArgs;
import com.pulumi.alicloud.vpc.Switch;
import com.pulumi.alicloud.vpc.SwitchArgs;
import com.pulumi.alicloud.ram.Role;
import com.pulumi.alicloud.ram.RoleArgs;
import com.pulumi.alicloud.emr.Cluster;
import com.pulumi.alicloud.emr.ClusterArgs;
import com.pulumi.alicloud.emr.inputs.ClusterHostGroupArgs;
import com.pulumi.codegen.internal.KeyedValue;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var defaultMainVersions = EmrFunctions.getMainVersions();
final var defaultInstanceTypes = EmrFunctions.getInstanceTypes(GetInstanceTypesArgs.builder()
.destinationResource("InstanceType")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.supportLocalStorage(false)
.instanceChargeType("PostPaid")
.supportNodeTypes(
"MASTER",
"CORE",
"TASK")
.build());
final var dataDisk = EmrFunctions.getDiskTypes(GetDiskTypesArgs.builder()
.destinationResource("DataDisk")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.instanceChargeType("PostPaid")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.build());
final var systemDisk = EmrFunctions.getDiskTypes(GetDiskTypesArgs.builder()
.destinationResource("SystemDisk")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.instanceChargeType("PostPaid")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.build());
for (var i = 0; i < (var_.vpc_id() == "" ? 1 : 0 == true); i++) {
new Network("vpc-" + i, NetworkArgs.builder()
.cidrBlock(var_.vpc_cidr())
.build());
}
for (var i = 0; i < (var_.security_group_id() == "" ? 1 : 0 == true); i++) {
new SecurityGroup("defaultSecurityGroup-" + i, SecurityGroupArgs.builder()
.vpcId(var_.vpc_id() == "" ? vpc.id() : var_.vpc_id())
.build());
}
for (var i = 0; i < (var_.vswitch_id() == "" ? 1 : 0 == true); i++) {
new Switch("vswitch-" + i, SwitchArgs.builder()
.availabilityZone(var_.availability_zone() == "" ? defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()) : var_.availability_zone())
.vswitchName(var_.vswitch_name())
.cidrBlock(var_.vswitch_cidr())
.vpcId(var_.vpc_id() == "" ? vpc.id() : var_.vpc_id())
.build());
}
var defaultRole = new Role("defaultRole", RoleArgs.builder()
.document("""
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"emr.aliyuncs.com",
"ecs.aliyuncs.com"
]
}
}
],
"Version": "1"
}
""")
.description("this is a role test.")
.force(true)
.build());
var defaultCluster = new Cluster("defaultCluster", ClusterArgs.builder()
.emrVer(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].emrVersion()))
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.hostGroups(
ClusterHostGroupArgs.builder()
.hostGroupName("master_group")
.hostGroupType("MASTER")
.nodeCount("2")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("1")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build(),
ClusterHostGroupArgs.builder()
.hostGroupName("core_group")
.hostGroupType("CORE")
.nodeCount("3")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("4")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build(),
ClusterHostGroupArgs.builder()
.hostGroupName("task_group")
.hostGroupType("TASK")
.nodeCount("2")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("4")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build())
.highAvailabilityEnable(true)
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.securityGroupId(var_.security_group_id() == "" ? defaultSecurityGroup.id() : var_.security_group_id())
.isOpenPublicIp(true)
.chargeType("PostPaid")
.vswitchId(var_.vswitch_id() == "" ? vswitch.id() : var_.vswitch_id())
.userDefinedEmrEcsRole(defaultRole.name())
.sshEnable(true)
.masterPwd("ABCtest1234!")
.build());
}
}

4. Create a emr gateway cluster

package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.alicloud.emr.EmrFunctions;
import com.pulumi.alicloud.emr.inputs.GetMainVersionsArgs;
import com.pulumi.alicloud.emr.inputs.GetInstanceTypesArgs;
import com.pulumi.alicloud.emr.inputs.GetDiskTypesArgs;
import com.pulumi.alicloud.vpc.Network;
import com.pulumi.alicloud.vpc.NetworkArgs;
import com.pulumi.alicloud.ecs.SecurityGroup;
import com.pulumi.alicloud.ecs.SecurityGroupArgs;
import com.pulumi.alicloud.vpc.Switch;
import com.pulumi.alicloud.vpc.SwitchArgs;
import com.pulumi.alicloud.ram.Role;
import com.pulumi.alicloud.ram.RoleArgs;
import com.pulumi.alicloud.emr.Cluster;
import com.pulumi.alicloud.emr.ClusterArgs;
import com.pulumi.alicloud.emr.inputs.ClusterHostGroupArgs;
import com.pulumi.codegen.internal.KeyedValue;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var defaultMainVersions = EmrFunctions.getMainVersions();
final var defaultInstanceTypes = EmrFunctions.getInstanceTypes(GetInstanceTypesArgs.builder()
.destinationResource("InstanceType")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.supportLocalStorage(false)
.instanceChargeType("PostPaid")
.supportNodeTypes("GATEWAY")
.build());
final var dataDisk = EmrFunctions.getDiskTypes(GetDiskTypesArgs.builder()
.destinationResource("DataDisk")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.instanceChargeType("PostPaid")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.build());
final var systemDisk = EmrFunctions.getDiskTypes(GetDiskTypesArgs.builder()
.destinationResource("SystemDisk")
.clusterType(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].clusterTypes()[0]))
.instanceChargeType("PostPaid")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.build());
for (var i = 0; i < (var_.vpc_id() == "" ? 1 : 0 == true); i++) {
new Network("vpc-" + i, NetworkArgs.builder()
.cidrBlock(var_.vpc_cidr())
.build());
}
for (var i = 0; i < (var_.security_group_id() == "" ? 1 : 0 == true); i++) {
new SecurityGroup("defaultSecurityGroup-" + i, SecurityGroupArgs.builder()
.vpcId(var_.vpc_id() == "" ? vpc.id() : var_.vpc_id())
.build());
}
for (var i = 0; i < (var_.vswitch_id() == "" ? 1 : 0 == true); i++) {
new Switch("vswitch-" + i, SwitchArgs.builder()
.availabilityZone(var_.availability_zone() == "" ? defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()) : var_.availability_zone())
.vswitchName(var_.vswitch_name())
.cidrBlock(var_.vswitch_cidr())
.vpcId(var_.vpc_id() == "" ? vpc.id() : var_.vpc_id())
.build());
}
var defaultRole = new Role("defaultRole", RoleArgs.builder()
.document("""
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"emr.aliyuncs.com",
"ecs.aliyuncs.com"
]
}
}
],
"Version": "1"
}
""")
.description("this is a role test.")
.force(true)
.build());
var gateway = new Cluster("gateway", ClusterArgs.builder()
.emrVer(defaultMainVersions.applyValue(getMainVersionsResult -> getMainVersionsResult.mainVersions()[0].emrVersion()))
.clusterType("GATEWAY")
.hostGroups(ClusterHostGroupArgs.builder()
.hostGroupName("master_group")
.hostGroupType("GATEWAY")
.nodeCount("1")
.instanceType(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].id()))
.diskType(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.diskCapacity(dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? dataDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.diskCount("1")
.sysDiskType(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].value()))
.sysDiskCapacity(systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) 160 ? systemDisk.applyValue(getDiskTypesResult -> getDiskTypesResult.types()[0].min()) : 160)
.build())
.highAvailabilityEnable(true)
.zoneId(defaultInstanceTypes.applyValue(getInstanceTypesResult -> getInstanceTypesResult.types()[0].zoneId()))
.securityGroupId(var_.security_group_id() == "" ? defaultSecurityGroup.id() : var_.security_group_id())
.isOpenPublicIp(true)
.chargeType("PostPaid")
.vswitchId(var_.vswitch_id() == "" ? vswitch.id() : var_.vswitch_id())
.userDefinedEmrEcsRole(defaultRole.name())
.sshEnable(true)
.masterPwd("ABCtest1234!")
.relatedClusterId(related_cluster_id)
.build());
}
}

Import

Aliclioud E-MapReduce cluster can be imported using the id e.g.

$ pulumi import alicloud:emr/cluster:Cluster default C-B47FB8FE96C67XXXX

Constructors

Link copied to clipboard
fun ClusterArgs(bootstrapActions: Output<List<ClusterBootstrapActionArgs>>? = null, chargeType: Output<String>? = null, clusterType: Output<String>? = null, configs: Output<List<ClusterConfigArgs>>? = null, depositType: Output<String>? = null, easEnable: Output<Boolean>? = null, emrVer: Output<String>? = null, highAvailabilityEnable: Output<Boolean>? = null, hostGroups: Output<List<ClusterHostGroupArgs>>? = null, isOpenPublicIp: Output<Boolean>? = null, keyPairName: Output<String>? = null, masterPwd: Output<String>? = null, metaStoreConf: Output<ClusterMetaStoreConfArgs>? = null, metaStoreType: Output<String>? = null, modifyClusterServiceConfig: Output<ClusterModifyClusterServiceConfigArgs>? = null, name: Output<String>? = null, optionSoftwareLists: Output<List<String>>? = null, period: Output<Int>? = null, relatedClusterId: Output<String>? = null, resourceGroupId: Output<String>? = null, securityGroupId: Output<String>? = null, sshEnable: Output<Boolean>? = null, tags: Output<Map<String, Any>>? = null, useLocalMetadb: Output<Boolean>? = null, userDefinedEmrEcsRole: Output<String>? = null, vswitchId: Output<String>? = null, zoneId: Output<String>? = null)

Functions

Link copied to clipboard
open override fun toJava(): ClusterArgs

Properties

Link copied to clipboard

Boot action parameters.

Link copied to clipboard
val chargeType: Output<String>? = null

Charge Type for this cluster. Supported value: PostPaid or PrePaid. Default value: PostPaid.

Link copied to clipboard
val clusterType: Output<String>? = null

EMR Cluster Type, e.g. HADOOP, KAFKA, DRUID, GATEWAY etc. You can find all valid EMR cluster type in emr web console. Supported 'GATEWAY' available in 1.61.0+.

Link copied to clipboard
val configs: Output<List<ClusterConfigArgs>>? = null

The custom configurations of emr-cluster service.

Link copied to clipboard
val depositType: Output<String>? = null

Cluster deposit type, HALF_MANAGED or FULL_MANAGED.

Link copied to clipboard
val easEnable: Output<Boolean>? = null

High security cluster (true) or not. Default value is false.

Link copied to clipboard
val emrVer: Output<String>? = null

EMR Version, e.g. EMR-3.22.0. You can find the all valid EMR Version in emr web console.

Link copied to clipboard
val highAvailabilityEnable: Output<Boolean>? = null

High Available for HDFS and YARN. If this is set true, MASTER group must have two nodes.

Link copied to clipboard
val hostGroups: Output<List<ClusterHostGroupArgs>>? = null

Groups of Host, You can specify MASTER as a group, CORE as a group (just like the above example).

Link copied to clipboard
val isOpenPublicIp: Output<Boolean>? = null

Whether the MASTER node has a public IP address enabled. Default value is false.

Link copied to clipboard
val keyPairName: Output<String>? = null

Ssh key pair.

Link copied to clipboard
val masterPwd: Output<String>? = null

Master ssh password.

Link copied to clipboard

The configuration of emr-cluster service component metadata storage. If meta store type is ’user_rds’, this should be specified.

Link copied to clipboard
val metaStoreType: Output<String>? = null

The type of emr-cluster service component metadata storage. ’dlf’ or ’local’ or ’user_rds’ .

Link copied to clipboard

The configurations of emr-cluster service modification after cluster created.

Link copied to clipboard
val name: Output<String>? = null

The name of emr cluster. The name length must be less than 64. Supported characters: chinese character, english character, number, "-", "_".

Link copied to clipboard
val optionSoftwareLists: Output<List<String>>? = null

Optional software list.

Link copied to clipboard
val period: Output<Int>? = null

If charge type is PrePaid, this should be specified, unit is month. Supported value: 1、2、3、4、5、6、7、8、9、12、24、36.

Link copied to clipboard
val relatedClusterId: Output<String>? = null

This specify the related cluster id, if this cluster is a Gateway.

Link copied to clipboard
val resourceGroupId: Output<String>? = null

The Id of resource group which the emr-cluster belongs.

Link copied to clipboard
val securityGroupId: Output<String>? = null

Security Group ID for Cluster, you can also specify this key for each host group.

Link copied to clipboard
val sshEnable: Output<Boolean>? = null

If this is set true, we can ssh into cluster. Default value is false.

Link copied to clipboard
val tags: Output<Map<String, Any>>? = null

A mapping of tags to assign to the resource.

Link copied to clipboard
val useLocalMetadb: Output<Boolean>? = null

Use local metadb. Default is false.

Link copied to clipboard
val userDefinedEmrEcsRole: Output<String>? = null

Alicloud EMR uses roles to perform actions on your behalf when provisioning cluster resources, running applications, dynamically scaling resources. EMR uses the following roles when interacting with other Alicloud services. Default value is AliyunEmrEcsDefaultRole.

Link copied to clipboard
val vswitchId: Output<String>? = null

Global vswitch id, you can also specify it in host group.

Link copied to clipboard
val zoneId: Output<String>? = null

Zone ID, e.g. cn-huhehaote-a