首页 > 解决方案 > 如何在多个子网上运行 AWS EMR 集群?

问题描述

目前,我们正在使用 EMR 中的 config.json 文件创建实例来配置集群。此文件指定子网(“Ec2SubnetId”)。

我所有的 EMR 实例最终都使用这个子网......我如何让它使用多个子网?这是我推送到 S3 的 terraform 模板。

{
   "Applications": [
        {"Name": "Spark"},
        {"Name": "Hadoop"}
    ],
    "BootstrapActions": [
        {
            "Name": "Step1-stuff",
            "ScriptBootstrapAction": {
                "Path": "s3://${artifact_s3_bucket_name}/artifacts/${build_commit_id}/install-stuff.sh",
                "Args": ["${stuff_args}"]
            }
        },
        {
            "Name": "setup-cloudWatch-agent",
            "ScriptBootstrapAction": {
                "Path": "s3://${artifact_s3_bucket_name}/artifacts/${build_commit_id}/setup-cwagent-emr.sh",
                "Args": ["${build_commit_id}"]
            }
        }
    ],
    "Configurations": [
        {
            "Classification": "spark",
            "Properties": {
                "maximizeResourceAllocation": "true"
            }
    ],
    "Instances": {
        "AdditionalMasterSecurityGroups": [ "${additional_master_security_group}" ],
        "AdditionalSlaveSecurityGroups": [ "${additional_slave_security_group}" ],
        "Ec2KeyName": "privatekey-${env}",
        "Ec2SubnetId": "${data_subnet}",
        "InstanceGroups": [

标签: amazon-web-servicesamazon-emr

解决方案


您目前无法实现您正在尝试做的事情。EMR 集群的所有节点始终位于同一子网中。

使用 Instance Fleets,您确实可以配置一组子网。但是在启动时,AWS 会选择最好的一个并将您的所有实例放在那里。

EMR 文档中,在“使用控制台配置实例队列”下:

  1. 对于网络,输入一个值。如果您为Network选择 V​​PC ,请选择单个EC2 子网或 CTRL + 单击以选择多个 EC2 子网。您选择的子网类型必须相同(公共或私有)。如果您只选择一个,您的集群将在该子网中启动。如果您选择一个组,则在集群启动时会从该组中选择最适合的子网。

推荐阅读