我想要的是能够监控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
是否可以监控Spark作业的执行内存?通过监视,我的意思是至少看到使用/可用,就像SparkUI的Executor选项卡中每个执行程序的存储内存一样。是或否?
我可以使用SparkListeners(@JacekLaskowski吗?)历史服务器怎么样?或者唯一的方法是通过外部工具? Graphana,Ganglia,其他人?如果是外部工具,您能指点教程或提供更详细的指导吗?
我看到这个SPARK-9103 Tracking spark's memory usage似乎还无法监控执行内存。这似乎与SPARK-23206 Additional Memory Tuning Metrics相关。
Peak Execution memory
是否可靠地估算任务中执行内存的使用/占用情况?例如,如果一个Stage UI说某个任务在峰值时使用1 Gb,并且每个执行器有5个cpu,这是否意味着每个执行器需要至少5 Gb执行内存来完成一个阶段?
我们可以用一些其他代理来瞥一眼执行内存吗?
有没有办法知道执行内存何时开始进入存储内存?当我的缓存表从SparkUI的“存储”选项卡中消失或只剩下其中的一部分时,是否意味着它被执行内存驱逐了?
答案 0 :(得分:1)
回答我自己的问题以供将来参考:
我们使用Mesos作为集群管理器。在Mesos UI中,我找到了一个页面,列出了给定worker上的所有执行程序,并且可以找到执行程序的Memory使用情况。它似乎是一个总内存使用量存储+执行。我可以清楚地看到,当记忆填满后,遗嘱执行人死亡。
访问:
可以为驾驶员做类似的事情。对于框架,您可以选择名称为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)。