apache-spark - 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 的文件时空间不足。
谢谢
解决方案
我正在设置根音量。
我不得不改变创建集群的方式,现在我将 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;
}
推荐阅读
- angularjs - 如何在整个组件通过 AngluarJS 中的 ng-bind-html 作为字符串传递时使表格可排序
- powershell - 创建新的 AD 用户并将其从 CSV 添加到多个组
- android - 蓝牙设备未在 android oreo 中列出
- reactjs - 如何同时使用自定义过滤器和 this.refs.jobs_table.handleFilterData() react-bootstrap-table
- amazon-web-services - AWS S3 存储桶策略的问题
- python - Iterdecode 从文件中跳过行
- c# - 借助注入服务的 AutoMapper 地图字典
- python - WTForms FileField AttributeError:“unicode”对象没有属性“文件名”
- vue.js - 克隆元素形式
- php - 在数学运算中使用 PHP preg_replace 匹配结果?