Scala 监视Spark中不同内存块的使用情况,了解OOM上正在运行的内存块是什么?

Scala 监视Spark中不同内存块的使用情况,了解OOM上正在运行的内存块是什么?,scala,memory,monitoring,apache-spark,Scala,Memory,Monitoring,Apache Spark,Apache Spark有3块内存: 缓存-当您调用Cache或persist 洗牌。这是用于洗牌操作(分组、重新分区和reduceByKey)的内存块 这是保存普通JVM对象的地方 现在,我想监控作业使用的内存量,以每个块的百分比表示,这样我就可以知道我应该调整这些数字,以便缓存和洗牌不会溢出到磁盘,堆不会OOM。例如,每隔几秒钟,我就会得到如下更新: Cache: 40% use (40/100 GB) Shuffle: 90% use (45/50 GB) Heap: 10% use

Apache Spark有3块内存:

  • 缓存-当您调用
    Cache
    persist
  • 洗牌。这是用于洗牌操作(分组、重新分区和
    reduceByKey
    )的内存块
  • 这是保存普通JVM对象的地方
现在,我想监控作业使用的内存量,以每个块的百分比表示,这样我就可以知道我应该调整这些数字,以便缓存和洗牌不会溢出到磁盘,堆不会OOM。例如,每隔几秒钟,我就会得到如下更新:

Cache: 40% use (40/100 GB)
Shuffle: 90% use (45/50 GB)
Heap: 10% use (1/10 GB)

我知道我可以尝试使用其他技术来找到最佳点,但我发现这非常困难,而且只要能够监控使用情况,就可以更轻松地编写和调整Spark作业。

好的,有
SparkContext.getExecutorMemoryStatus
SparkContext.getExecutorStorageStatus
。调用m会定期为您提供一些方法…谢谢@DanielDarabos我会尝试一下,快速阅读代码,看起来它可以实现我想要的监视缓存的功能。我将深入研究这些方法,并可能会找到其他方法。如果您知道/能够找到监视洗牌和堆的方法,我将不胜感激。谢谢获得!