ast*_*asz 11 memory memory-management apache-spark unified-memory
我想要的是能够监视Spark 执行内存,而不是SparkUI中可用的存储内存。我的意思是,执行内存不是执行者内存。
通过执行内存,我的意思是:
执行随机,连接,排序和聚合时,此区域用于缓冲中间数据。该区域的大小是通过spark.shuffle.memoryFraction(default0.2)配置的。根据:Spark 1.6中的统一内存管理
在寻找答案之后,我什么都没找到,只有未解决的StackOverflow问题,仅与存储内存相关的答案或类型模糊的答案使用Ganglia,Cloudera控制台等。
似乎对堆栈溢出有此信息的需求,但没有一个令人满意的答案。这是搜索监视Spark内存时StackOverflow的一些重要帖子
问题
Spark版本> 2.0
是否可以监视Spark作业的执行内存?通过监视,我的意思是至少看到已使用/可用,就像在SparkUI的“执行程序”选项卡中为每个执行程序查看存储内存一样。是还是不是?
我可以用SparkListeners(@JacekLaskowski吗?)历史服务器怎么样?还是唯一的办法就是通过外部工具?Graphana,Ganglia,还有其他人吗?如果是外部工具,您能否指向教程或提供一些更详细的指南?
我看到了此SPARK-9103跟踪spark的内存使用情况,似乎尚无法监视执行内存。同样,这似乎与SPARK-23206其他内存调整指标有关。
是否Peak Execution memory
可靠估计任务中执行内存的使用/占用?例如,如果一个阶段UI表示某个任务在峰值使用1 Gb,而每个执行者我有5 cpu,是否意味着我需要每个执行者至少有5 Gb执行内存来完成一个阶段?
我们还可以使用其他代理来了解执行内存吗?
有没有办法知道执行内存何时开始消耗到存储内存中?当我的缓存表从SparkUI的“存储”选项卡中消失或仅保留一部分时,是否意味着它已被执行内存驱逐?
回答我自己的问题以供将来参考:
我们使用 Mesos 作为集群管理器。在 Mesos UI 中,我发现一个页面列出了给定工作线程上的所有执行程序,并且可以在其中找到执行程序的内存使用情况。好像是存储+执行的总内存使用量。我可以清楚地看到,当内存填满时,执行者就会死亡。
访问:
对于驱动程序也可以进行类似的操作。对于框架,您选择一个有名称的框架Spark Cluster
如果您想知道如何以编程方式提取此数字,请参阅我对此问题的回答:How to get Mesos Agents Framework Executor Memory