首页 > 解决方案 > 为什么在增加 memoryOverhead 后收集大型数据集会成功

问题描述

介绍

在 apache spark 文档中,我看到内存分为三组,可以使用多个参数进行配置。假设我们有一台 AWS EMR 机器 m4.xlarge。在这台机器上,Yarn 的最大分配内存等于 12288 MB。使用这些配置参数:

我得到:

我对驱动程序和执行程序使用相同的配置。

首先 - 这个计算是否正确?这些参数可以吗?我主要想知道它是否会在机器上留下足够的 RAM,以便 f.ex. YARN 守护进程不会失败?

主要问题

这些内存区域究竟存储了什么?

我想知道,因为我正在做一个相当大的收集(创建一个~1.5G 地图[(长,长)]),然后我打算将其广播给所有执行者。当我在没有明确指定开销(默认为 0.1)的情况下进行收集时,集群失败,容器因超出内存限制而被 YARN 杀死,但开销为 0.2 时一切顺利。似乎我的 Map 存储在开销中,但是执行程序存储的目的是什么?

提前致谢!

标签: apache-sparkapache-spark-dataset

解决方案


唯一能够通过反复试验来识别的是 f.ex。在将数据收集到驱动程序内存时,开销需要能够容纳它,这表明收集土地在开销中。

然而,广播变量需要适合 ,executor.memory似乎memoryOverhead不受此影响。


推荐阅读