在apache spark文档中,我看到内存分为三组,可以使用几个参数进行配置。 可以说我们有一台AWS EMR机器m4.xlarge。在这台机器上,Yarn的最大分配内存等于12288 MB。使用以下配置参数:
我得到:
spark.executor.memory * spark.memory.fraction * spark.storage.fraction
)spark.executor.memory * spark.memory.fraction * spark.storage.fraction
)spark.executor.memory * 1-spark.memory.fraction
)我对驱动程序和执行程序使用相同的配置。
首先-此计算正确吗?这些参数可以吗?我主要是想知道它是否会在机器上留下足够的RAM,以便f.ex。 YARN守护程序不会失败?
这些存储区中到底存储了什么?
我想知道是因为我正在做一个相当大的收集(创建一个约1.5G的Map [(Long,Long)]),然后打算将其广播给所有执行者。当我在未明确指定开销(默认值为0.1)的情况下进行收集时,群集失败,容器被YARN杀死,原因是内存超出了限制,但是开销为0.2时,一切顺利进行。好像我的地图存储在开销中,但是执行存储的目的是什么?
谢谢!
答案 0 :(得分:0)
唯一可以通过反复试验来识别的是f.ex。在将数据收集到驱动程序内存时,开销必须能够容纳它,这表明收集开销中的土地。
但是,广播的变量必须适合executor.memory
,memoryOverhead
似乎不受此影响。
答案 1 :(得分:-1)
memoryOverhead配置不是执行程序内存的百分比(尽管这是最初计算的方式)。这是Spark文档的摘录:
除非另有说明,否则在集群模式下,每个驱动程序进程在MiB中要分配的非堆内存量。
因此,当您将其设置为0.2时,spark会读取0.2 MB