通过执行内存,我指的是:
这个区域用于在执行洗牌、连接、排序和聚合时缓冲中间数据。该区域的大小通过spark.shuffle.memoryFraction进行配置(默认值为0.2)。 根据:Spark 1.6中的统一内存管理 经过激烈的搜索,我找不到答案,只有未被回答的StackOverflow问题、仅涉及存储内存的答案或者模糊答案,例如“使用Ganglia”、“使用Cloudera console”等等……
在StackOverflow上搜索“monitoring spark memory”时,似乎有很多人需要这方面的信息,但没有一个令人满意的答案。以下是一些关于“monitoring spark memory”的热门帖子: 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 版本 > 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
是否是任务执行内存使用/占用的可靠估计值?例如,如果一个阶段UI显示一个任务在峰值时使用1 GB,而我每个执行器有5个CPU,这是否意味着我需要至少在每个执行器上有5 GB的执行内存可用才能完成一个阶段?是否有其他代理可以用来窥视执行内存?
有没有办法知道执行内存何时开始侵占存储内存?当我的缓存表从SparkUI的Storage选项卡中消失或只剩下部分时,这是否意味着它被执行内存驱逐了?