当我们尝试运行正在处理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时为什么空间不足。
谢谢
答案 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;
}