首页 > 解决方案 > EMR Spark Cluster 设备 5000 个分区上没有剩余空间

问题描述

当我们尝试运行处理 2gb 和 10gb 文件的 Spark 作业时。我收到错误:

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 的文件时空间不足。

谢谢

标签: apache-sparkamazon-emr

解决方案


我正在设置根音量。

我不得不改变创建集群的方式,现在我将 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;
    }

推荐阅读