2

我使用在紗線簇火花(HDP 2.4):火花上紗:使用以下設置更少執行存儲器比通過設置火花提交

  • 1 Masternode
    • 64 GB RAM (48 GB可用)
    • 12芯(8芯可用)
  • 5 Slavenodes
    • 64 GB RAM(48 GB可用),每個
    • 12芯(8芯可用)每個
  • YARN設置所有容器的
    • 存儲器(一個主機的):48 GB
    • 最小容器大小=最大容器大小= 6 GB
    • 集羣中的核心數= 40(工作人員的5 x 8核心)
    • 最小#vcores/container = maximum#vcores/container = 1

當我運行我的命令spark-submit --num-executors 10 --executor-cores 1 --executor-memory 5g ... SPARK樂馳的應用應該給各執行5 GB的RAM權(我設置的內存只有到5g由於〜10%,一些開銷內存)。

但是,當我在星火UI一看,只見每一個執行者只有3.4 GB的內存,見截圖:

screenshot

有人能解釋爲什麼有這麼少的內存分配?

+0

[看看這個](http://spark.apache.org/docs/latest/tuning.html#memory-management-overview) –

回答

3

UI中的存儲內存列顯示用於執行和RDD存儲的內存量。默認情況下,這等於(HEAP_SPACE - 300MB)* 75%。內存的其餘部分用於內部元數據,用戶數據結構和其他東西。

您可以通過設置spark.memory.fraction(不推薦)來控制此金額。查看更多內容Spark's documentation

+0

HEAP_SPACE與「--executor-memory」值是否匹配?如果是這樣,那麼執行內存應該是(5 * 1024 - 300)* 0.75 = 3615 MB,等於3,53 GB。然後仍然有> 0.1 GB丟失。 –

+0

剛剛嘗試過:將「spark.memory.fraction」設置爲0.9,然後導致執行內存爲(5 * 1024 - 300)* 0.9 = 4338 MB = 4.24 GB。但在Spark UI中,它顯示了4.0 GB。 –

+0

Java程序中的堆大小不準確。當你使用'-Xmx5g'向JVM詢問5g堆時,它不會給你一堆'5 * 1024 * 1024 * 1024'字節,但數量較少。檢查這個答案http://stackoverflow.com/a/13988748/205528 – Dikei