TOP

spark堆外內存的設置
2019-01-06 01:28:34 】 瀏覽:654
Tags:

版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/jxx4903049/article/details/79197428

MemoryOverheadJVM進程中除Java以外占用的空間大小,包括方法區(永久代)、Java虛擬機棧、本地方法棧、JVM進程本身所用的內存、直接內存(Direct Memory等。通過spark.yarn.executor.memoryOverhead設置,單位MB

相關源碼:

[java]
  1. //yarn/common/src/main/scala/org/apache/spark/deploy/yarn/YarnSparkHadoopUtil.scala
  2. valMEMORY_OVERHEAD_FACTOR=0.07
  3. valMEMORY_OVERHEAD_MIN=384
  4. //yarn/common/src/main/scala/org/apache/spark/deploy/yarn/YarnAllocator.scala
  5. protectedvalmemoryOverhead:Int=sparkConf.getInt("spark.yarn.executor.memoryOverhead",
  6. math.max((MEMORY_OVERHEAD_FACTOR*executorMemory).toInt,MEMORY_OVERHEAD_MIN))
  7. ......
  8. valtotalExecutorMemory=executorMemory+memoryOverhead
  9. numPendingAllocate.addAndGet(missing)
  10. logInfo(s"Willallocate$missingexecutorcontainers,eachwith$totalExecutorMemoryMB"+
  11. s"memoryincluding$memoryOverheadMBoverhead")


三、相關問題

如果用于存儲RDD的空間不足,先存儲的RDD的分區會被后存儲的覆蓋。當需要使用丟失分區的數據時,丟失的數據會被重新計算

如果Java或者永久代的內存不足,則會產生各種OOM異常,executor會被結束。spark會重新申請一個container運行executor。失敗executor上的任務和存儲的數據會在其他executor上重新計算。

如果實際運行過程中ExecutorMemory+MemoryOverhead之和(JVM進程總內存)超過container的容量。YARN會直接殺死containerexecutor日志中不會有異常記錄。spark同樣會重新申請container運行executor


Java以外的JVM進程內存占用較多的情況下,應該將MemoryOverhead設置為一個足夠大的值,應該將MemoryOverhead設置為一個足夠大的值,以防JVM進程因實際占用的內存超標而被kill。如果默認值math.max((MEMORY_OVERHEAD_FACTOR *executorMemory).toInt,MEMORY_OVERHEAD_MIN不夠大优乐棋牌app下载优乐棋牌app下载,可以通過spark.yarn.executor.memoryOverhead手動設置一個更大的值。

請關注公眾號獲取更多資料



】【打印繁體】【】【】 【】【】【】 【關閉】 【返回頂部
上一篇Spark 本地模式運行 磁盤空間不足 下一篇Spark變量訪問總結