17

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

通过执行内存,我的意思是:

该区域用于在执行混洗、连接、排序和聚合时缓冲中间数据。这个区域的大小是通过 spark.shuffle.memoryFraction (default0.2) 配置的。根据:Spark 1.6 中的统一内存管理

经过激烈搜索答案后,我只发现未回答的 StackOverflow 问题,仅与存储内存相关的答案或使用 Ganglia类型的模糊答案的答案,使用 Cloudera 控制台等......

似乎对 Stack Overflow 上的这些信息有需求,但还没有一个令人满意的答案。以下是 StackOverflow 在搜索监控 spark 内存时的一些顶帖

监控 Spark 执行和存储内存利用率

监控 Spark 作业的内存使用情况

SPARK:如何监控 Spark 集群的内存消耗?

Spark - 监控实际使用的执行器内存

如何通过 spark 应用程序监控内存和 CPU 使用情况?

如何获取 Spark 应用程序的内存和 CPU 使用率?

问题

星火版本> 2.0

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

  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 的执行内存才能完成一个阶段?

  5. 我们可以使用其他代理来了解执行内存吗?

  6. 有没有办法知道执行内存何时开始吞噬存储内存?当我的缓存表从 SparkUI 的“存储”选项卡中消失或仅保留一部分时,这是否意味着它已被执行内存驱逐?

4

2 回答 2

4

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

我们使用 Mesos 作为集群管理器。在 Mesos UI 中,我找到了一个页面,其中列出了给定工作人员的所有执行程序,并且可以找到执行程序的内存使用情况。这似乎是总内存使用存储+执行。我可以清楚地看到,当内存填满时,执行者就死了。

访问:

  • 转到列出所有集群工作人员的代理选项卡
  • 选择工人
  • 选择框架 - 带有脚本名称的框架
  • 在里面,你将有一个在这个特定工作人员上运行的工作的执行者列表。
  • 有关内存使用情况,请参阅:Mem (Used / Allocated)

可以对驱动程序进行类似的操作。对于一个框架,你选择一个有名字的框架Spark Cluster

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

于 2018-06-07T12:05:59.077 回答
0

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

于 2020-08-15T04:03:12.540 回答