Spark执行内存监控

ast*_*asz 11 memory memory-management apache-spark unified-memory

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

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

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

在寻找答案之后,我什么都没找到,只有未解决的StackOverflow问题,仅与存储内存相关的答案或类型模糊的答案使用GangliaCloudera控制台等。

似乎对堆栈溢出有此信息的需求,但没有一个令人满意的答案。这是搜索监视Spark内存时StackOverflow的一些重要帖子

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

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

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

Spark-监视实际使用的执行程序内存

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

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

问题

Spark版本> 2.0

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

  2. 我可以用SparkListeners(@JacekLaskowski吗?)历史服务器怎么样?还是唯一的办法就是通过外部工具?Graphana,Ganglia,还有其他人吗?如果是外部工具,您能否指向教程或提供一些更详细的指南?

  3. 我看到了此SPARK-9103跟踪spark的内存使用情况,似乎尚无法监视执行内存。同样,这似乎与SPARK-23206其他内存调整指标有关

  4. 是否Peak Execution memory可靠估计任务中执行内存的使用/占用?例如,如果一个阶段UI表示某个任务在峰值使用1 Gb,而每个执行者我有5 cpu,是否意味着我需要每个执行者至少有5 Gb执行内存来完成一个阶段?

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

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

ast*_*asz 4

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

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

访问:

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

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

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