EMR Spark群集设备5000分区上没有剩余空间

时间:2018-07-16 20:03:34

标签: apache-spark amazon-emr

当我们尝试运行正在处理2gb和10gb文件的Spark Job时。我收到错误消息:

org.apache.spark.SparkException: Job aborted due to stage failure: Task 2003 in stage 32.0 failed 1 times, most recent failure: Lost task 2003.0 in stage 32.0 (TID 33046, localhost, executor driver): java.io.FileNotFoundException: /mnt/tmp/blockmgr-13430cd7-0455-4sfgs-a98f-7f96e0252471/13/temp_shuffle_e680c565-f17a-47cb-9ef9-29cdcf14e50f (No space left on device)

我们通过将两个DataFrame重新划分为5000(我们尝试使用100、1000并遇到相同的问题)来运行它。

这是我们正在使用的一些Spark配置。

INFO MemoryStore:MemoryStore的容量为38.1 GB

spark.executor.memory] =12G
spark.driver.memory =64G
spark.executor.cores =4

创建实例时,我们将附加一个100BG EBS卷(我们有5个节点集群,这些集群是根据java aws sdk动态创建的)

不确定在处理文件最大不超过20gb时为什么空间不足。

谢谢

1 个答案:

答案 0 :(得分:0)

我正在设置根目录音量。

我不得不改变创建集群的方式,现在我要为集群中的每个实例分配EBS卷。

private InstanceFleetConfig getInstanceFleetConfig(String instanceType,InstanceFleetType instanceFleetType,int onDemandCapacity) {
        InstanceFleetConfig masterInstanceConfig = new InstanceFleetConfig();
        masterInstanceConfig.setInstanceFleetType(instanceFleetType);
        masterInstanceConfig.setTargetOnDemandCapacity(onDemandCapacity);

        InstanceTypeConfig instanceTypeConfig = new InstanceTypeConfig();
        instanceTypeConfig.setInstanceType(instanceType);

        EbsConfiguration ebsConfiguration = new EbsConfiguration();
        EbsBlockDeviceConfig ebsBDConfig = new EbsBlockDeviceConfig();
        // Setting the Volume Size to 100GB
        ebsBDConfig.setVolumeSpecification(new VolumeSpecification().withSizeInGB(100).withVolumeType(VolumeType.Gp2.toString()));

        List<EbsBlockDeviceConfig> ebsBlockDeviceConfigs = new ArrayList<EbsBlockDeviceConfig>();
        ebsBlockDeviceConfigs.add(ebsBDConfig);

        ebsConfiguration.setEbsBlockDeviceConfigs(ebsBlockDeviceConfigs);

        instanceTypeConfig.setEbsConfiguration(ebsConfiguration);

        List<InstanceTypeConfig> instanceTypeConfigs = new ArrayList<InstanceTypeConfig>();
        instanceTypeConfigs.add(instanceTypeConfig);

        masterInstanceConfig.setInstanceTypeConfigs(instanceTypeConfigs);

        return masterInstanceConfig;
    }