如何在多个子网上运行 AWS EMR 集群?

Posted

技术标签:

【中文标题】如何在多个子网上运行 AWS EMR 集群?【英文标题】:How to run an AWS EMR cluster on multiple subnets? 【发布时间】:2019-12-02 22:53:04 【问题描述】:

目前我们正在使用 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": [

【问题讨论】:

看来我可能不得不使用“实例舰队”来做我正在寻找的东西。 【参考方案1】:

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

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

来自EMR Documentation,在“使用控制台配置实例队列”下:

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

【讨论】:

以上是关于如何在多个子网上运行 AWS EMR 集群?的主要内容,如果未能解决你的问题,请参考以下文章

Amazon EMR 服务与 EMR 集群

如何将 Spark EMR 集群与 AWS elasticsearch 集群连接起来

带有 cloudformation 的 AWS EMR 集群:如何启用调试

在没有 spark UI 的情况下在 AWS EMR 中监控 spark 集群

寻找有关如何使用 python 启动 AWS EMR 集群以运行 pyspark 步骤的示例

我在 AWS 中有一个现有的 EMR 集群。我想从气流运行 dag 到现有的 aws 集群