Spark执行内存监控

时间:2018-02-13 13:41:21

标签: apache-spark memory memory-management unified-memory

我想要的是能够监控Spark 执行内存,而不是SparkUI中可用的存储内存。我的意思是,执行内存不执行内存

执行记忆我的意思是:

  

此区域用于在执行随机播放,联接,排序和聚合时缓冲中间数据。该区域的大小通过spark.shuffle.memoryFraction(default0.2)配置。   根据:Unified Memory Management in Spark 1.6

经过深入搜索答案后,我发现只有无法解答的StackOverflow问题,仅与存储内存相关的答案或者使用Ganglia 的模糊答案的答案,使用Cloudera控制台等......

Stack Overflow上似乎需要这些信息,但没有一个令人满意的答案可用。以下是搜索监视火花存储器

时StackOverflow的一些重要帖子

Monitor Spark execution and storage memory utilisation

Monitoring the Memory Usage of Spark Jobs

SPARK: How to monitor the memory consumption on Spark cluster?

Spark - monitor actual used executor memory

How can I monitor memory and CPU usage by spark application?

How to get memory and cpu usage by a Spark application?

问题

Spark版本> 2.0

  1. 是否可以监控Spark作业的执行内存?通过监视,我的意思是至少看到使用/可用,就像SparkUI的Executor选项卡中每个执行程序的存储内存一样。是或否?

  2. 我可以使用SparkListeners(@JacekLaskowski吗?)历史服务器怎么样?或者唯一的方法是通过外部工具? Graphana,Ganglia,其他人?如果是外部工具,您能指点教程或提供更详细的指导吗?

  3. 我看到这个SPARK-9103 Tracking spark's memory usage似乎还无法监控执行内存。这似乎与SPARK-23206 Additional Memory Tuning Metrics相关。

  4. Peak Execution memory是否可靠地估算任务中执行内存的使用/占用情况?例如,如果一个Stage UI说某个任务在峰值时使用1 Gb,并且每个执行器有5个cpu,这是否意味着每个执行器需要至少5 Gb执行内存来完成一个阶段?

    < / LI>
  5. 我们可以用一些其他代理来瞥一眼执行内存吗?

  6. 有没有办法知道执行内存何时开始进入存储内存?当我的缓存表从SparkUI的“存储”选项卡中消失或只剩下其中的一部分时,是否意味着它被执行内存驱逐了?

2 个答案:

答案 0 :(得分:1)

回答我自己的问题以供将来参考:

我们使用Mesos作为集群管理器。在Mesos UI中,我找到了一个页面,列出了给定worker上的所有执行程序,并且可以找到执行程序的Memory使用情况。它似乎是一个总内存使用量存储+执行。我可以清楚地看到,当记忆填满后,遗嘱执行人死亡。

访问:

  • 转到“代理”标签,其中列出了所有群集工作人员
  • 选择工作人员
  • 选择框架 - 具有脚本名称的框架
  • 在内部,您将获得在此特定工作人员上运行的作业的执行程序列表。
  • 有关内存使用情况,请参阅:Mem(已使用/已分配)

可以为驾驶员做类似的事情。对于框架,您可以选择名称为Spark Cluster

的框架

如果您想知道如何以编程方式提取此数字,请参阅我对此问题的回答:How to get Mesos Agents Framework Executor Memory

答案 1 :(得分:0)

我为执行程序启用了Spark内部指标,并且可以为我的研究获取有关JVMHeapMemory,jvm.heap.usage,OnHeapExecutionMemory,OnHeapStroageMemory和OnHeapUnifiedMemory的信息。有关更多信息,请参考文档(https://spark.apache.org/docs/3.0.0-preview/monitoring.html)。