监视Spark中不同的内存使用块,并了解OOM上的耗尽情况?

sam*_*est 5 memory monitoring scala apache-spark

Apache Spark具有3个内存块:

  • 缓存-在您致电cachepersist
  • 随机播放。这是用于随机操作(分组,重新分区和)的内存块reduceByKey
  • 堆。这是保留普通JVM对象的地方。

现在,我想监视作业所占用的内存量(占每个块的百分比),这样我就知道我应该将这些数字调整为什么,以使Cache和Shuffle不会溢出到磁盘,而Heap不会OOM。例如,每隔几秒钟我就会收到一个更新,例如:

Cache: 40% use (40/100 GB)
Shuffle: 90% use (45/50 GB)
Heap: 10% use (1/10 GB)
Run Code Online (Sandbox Code Playgroud)

我知道我可以尝试使用其他技术来找到最有效的方法,但是我发现这非常费力,并且仅能够监视使用情况,这将使编写和调整Spark作业更加容易。