8

我認爲,隨着項目Tungesten的整合,spark會自動使用堆內存。閃存堆堆內存配置和鎢

什麼是spark.memory.offheap.size和spark.memory.offheap.enabled?我是否需要手動指定Tungsten的堆內存量?

回答

9

火花/鎢使用編碼器/解碼器,以表示JVM對象作爲其然後可以被序列化,並在具有高性能方式操作上的高度專業化的火花SQL類型的對象。內部格式表示非常高效並且對GC內存使用非常友好。

因此,即使在堆模式鎢緩解JVM的巨大開銷的默認操作對象的內存佈局和GC運行時間。該模式下的鎢確實爲了其內部目的在堆上分配對象,並且分配內存塊可能很大,但發生頻率要低得多,並且能夠平穩地保持GC生成轉換。這幾乎消除了考慮移動這種內部結構的需要。

在我們對這個模式的實驗和關閉,我們沒有看到一個相當大的運行時間改善。但是,您在堆外模式下獲得的是,您需要仔細設計JVM進程之外的內存分配。這可能會在像YARN,Mesos等容器管理器中帶來一些困難,當您需要允許和計劃除JVM進程配置之外的額外內存塊時。

同樣在關斷堆模式鎢使用sun.misc.Unsafe在您的部署方案,其可能不期望的或甚至可能的(與例如限制性Java安全管理器配置)。

我也是從喬希·羅森共享時間標記的視頻會議talk時被他問類似的問題。