启动集群时如何指定主节点的磁盘空间(卷大小)?

时间:2021-03-26 18:44:13

标签: amazon-ec2 amazon-emr

本文档显示了基于实例大小的默认卷大小: https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-storage.html

我的问题是如何在启动集群时指定更大的卷大小。

目前,我在集群启动并运行后从 EMR 页面手动更改它: enter image description here

1 个答案:

答案 0 :(得分:1)

您可以指定 VolumeSpecification JSON 来完成此操作。我还没有为主节点尝试过这个。核心节点和任务节点我都用过,但我相信这个概念也可以扩展到主节点。

VolumeSpecification JSON 中的字段是不言自明的,所以我不在这里添加它们的解释。您可以在此处阅读VolumeSpecification explanation

我正在添加一个代码片段,可以帮助您准确地使用此配置。 我在我的代码中使用标准 boto3 library。我有一个生成 EMR 集群的 lambda 函数,但是拥有一个生成 EMR 的 lambda 函数不是必须,您可以选择自己的替代方案。 代码片段是:

from datetime import datetime
import boto3
'''
    This code snippet is used to create an EMR cluster.
'''

def create_emr_cluster(event, context):
    conn = boto3.client("emr")
    today = datetime.today().strftime('%Y-%m-%d')
    cluster_id = conn.run_job_flow(
        Name='Your_EMR_name',
        ServiceRole='EMR_DefaultRole',
        JobFlowRole='EMR_EC2_DefaultRole',
        VisibleToAllUsers=True,
        LogUri='s3://your-s3-path-where-you-want-cluster-logs/%s/' % today,
        ReleaseLabel='emr-5.17.0',
        ScaleDownBehavior='TERMINATE_AT_TASK_COMPLETION',
        Applications=[{'Name': 'Spark'},
                      {'Name': 'Hadoop'},
                      {'Name': 'Hive'},
                      {'Name': 'Hue'}]
        Instances={
            'KeepJobFlowAliveWhenNoSteps': False,
            'Ec2KeyName': 'your-key-name-here',
            'Ec2SubnetId': 'your-subnet-id',
            'InstanceFleets': [
                {'Name': 'Master Node',
                 'InstanceFleetType': 'MASTER',
                 'TargetOnDemandCapacity': 1,
                 'InstanceTypeConfigs': [{
                     'InstanceType': 'c4.xlarge'
                 }]
                 }, {
                    'Name': 'Core Node',
                    'InstanceFleetType': 'CORE',
                    'TargetOnDemandCapacity': 1,
                    'InstanceTypeConfigs': [{
                        'InstanceType': 'r5.2xlarge',
                        "EbsConfiguration": {
                            "EbsBlockDeviceConfigs": [
                                {
                                    "VolumeSpecification": {
                                        "SizeInGB": 64,
                                        "VolumeType": "gp2"
                                    },
                                    "VolumesPerInstance": 1
                                }
                            ]
                        }
                    }]
                }, {
                    'Name': 'Task Nodes',
                    'InstanceFleetType': 'TASK',
                    'TargetSpotCapacity': 100,
                    'InstanceTypeConfigs': [{
                        'InstanceType': 'r5.2xlarge',
                        'BidPriceAsPercentageOfOnDemandPrice': 50,
                        'WeightedCapacity': 16,
                        "EbsConfiguration": {
                            "EbsBlockDeviceConfigs": [
                                {
                                    "VolumeSpecification": {
                                        "SizeInGB": 32,
                                        "VolumeType": "gp2"
                                    },
                                    "VolumesPerInstance": 1
                                }
                            ]
                        }
                    }, {
                        'InstanceType': 'r5.4xlarge',
                        'BidPriceAsPercentageOfOnDemandPrice': 50,
                        'WeightedCapacity': 40,
                        "EbsConfiguration": {
                            "EbsBlockDeviceConfigs": [
                                {
                                    "VolumeSpecification": {
                                        "SizeInGB": 64,
                                        "VolumeType": "gp2"
                                    },
                                    "VolumesPerInstance": 1
                                }
                            ]
                        }
                    }]

                }]
        }
    )
    return cluster_id['JobFlowId']