问题 火花堆内存配置和钨


我认为,通过Tungesten项目的集成,spark会自动使用堆内存。

什么是spark.memory.offheap.size和spark.memory.offheap.enabled?我是否需要手动指定Tungsten的关闭堆内存量?


2235
2018-04-10 18:55


起源



答案:


Spark / Tungsten使用编码器/解码器将JVM对象表示为高度专业化的Spark SQL Types对象,然后可以以高性能的方式对其进行序列化和操作。内部格式表示高效且对GC内存利用率友好。

因此,即使在默认的堆上模式下运行,Tungsten也可以减轻JVM对象内存布局和GC运行时间的巨大开销。这种模式下的钨  为了内部目的而在堆上分配对象,并且分配内存块可能很大但是它的发生频率要低得多,并且GC生成过渡平稳地存在。这几乎消除了考虑在堆外移动此内部结构的需要。

在我们开启和关闭此模式的实验中,我们没有看到相当大的运行时间改进。但是你在off-heap模式下得到的是需要仔细设计JVM进程之外的内存分配。当您需要允许并计划除JVM进程配置之外的其他内存块时,这可能会在YARN,Mesos等容器管理器中造成一些困难。

同样在堆外模式下,Tungsten使用sun.misc.Unsafe,这在您的部署方案中可能不是所希望的甚至可能的(例如,使用限制性的Java安全管理器配置)。

我也在分享一个带时间标记的视频会议 谈论 当Josh Rosen被问到类似的问题时。


15
2018-04-26 11:49