如何配置EMR实例队列Diversified策略实现多实例家族节点分配
配置EMR实例舰队的Diversified分配策略实现实例家族均匀分配
要实现每个m4实例家族启动2个Core节点的需求,你只需要修改config.json里CoreFleet的配置,添加实例供应规格来指定diversified分配策略,替代默认的lowestPrice策略即可。
修改后的完整config.json配置
[ { "Name": "MasterFleet", "InstanceFleetType": "MASTER", "TargetOnDemandCapacity": 1, "InstanceTypeConfigs": [{"InstanceType": "m4.xlarge"}] }, { "Name": "CoreFleet", "InstanceFleetType": "CORE", "TargetSpotCapacity": 6, "LaunchSpecifications": { "SpotSpecification": { "TimeoutDurationMinutes": 10, "TimeoutAction": "SWITCH_TO_ON_DEMAND" } }, "InstanceFleetProvisioningSpecifications": { "SpotSpecification": { "AllocationStrategy": "diversified" } }, "InstanceTypeConfigs": [ { "InstanceType": "m4.large", "BidPrice": "0.1" }, { "InstanceType": "m4.xlarge", "BidPrice": "0.2" }, { "InstanceType": "m4.2xlarge", "BidPrice": "0.4" } ] } ]
关键配置说明
InstanceFleetProvisioningSpecifications: 这个配置段专门用来定义实例舰队的资源分配策略,我们在其中的SpotSpecification下设置AllocationStrategy: "diversified",直接替换默认的lowestPrice策略。diversified分配策略逻辑: 这个策略会在你列出的所有可用实例类型之间均匀分配目标容量。你设置了TargetSpotCapacity:6,同时有3种m4系列实例类型,所以EMR会自动给每个类型分配2个节点,刚好匹配你的需求。- 为什么之前会全部分配到同一家族?默认的
lowestPrice策略会优先选择出价最低且有可用库存的实例类型,把所有目标容量都塞给它,这就是你之前遇到的情况。
使用修改后的配置创建集群
还是用你原来的AWS CLI命令,只要替换成修改后的config.json文件就行:
aws emr create-cluster \ --instance-fleets file://config.json
额外注意事项
- 尽量保证
TargetSpotCapacity是实例类型数量的整数倍(比如这里6÷3=2),这样能完美实现均匀分配;如果不是,EMR会先尽量均分,剩余的少量容量会分配给任意可用的实例类型。 - 每个实例类型的
BidPrice要设置合理,确保Spot实例能成功启动,否则EMR会按照你设置的TimeoutAction切换到On-Demand实例(如果开启的话)。
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

