You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark应用Executor启停时间与数量获取及日志与GUI差异咨询

问题解答

一、Event Log和History Server GUI数据不一致的原因

  • History Server的Executors标签页默认只展示当前存活或最后活跃的Executor,而event-log会记录所有曾经创建过的Executor——包括那些因为资源回收、故障重启、任务完成后被释放的临时Executor,所以ID数量会比GUI里多很多。
  • 运行时长的差异是因为统计维度不同:GUI里的Task Time (GC Time)是该Executor上所有任务的累计执行时间(包含GC耗时),而event-log里记录的是Executor从创建到销毁的实际生命周期时长,两者数值自然不一样。

二、截图时间的判定

  • 2022年12月13日周二下午2:49:24.444:如果这个时间对应event-log里的SparkListenerExecutorAdded事件,或者是GUI中Executor行的起始时间,那就是Executor的创建时间。
  • 2022年12月13日周二下午2:52:04.811:如果对应event-log里的SparkListenerExecutorRemoved事件,或者是GUI中Executor行的结束时间,那就是Executor的终止时间。

三、Executor ID 10没在GUI显示的原因

  • 这个Executor大概率是创建后很快就被销毁了——比如集群资源不足被回收、启动失败、只执行了少量任务就被释放,History Server GUI默认不会展示这类短生命周期的Executor,只会保留活跃时间较长或者最后存在的Executor记录,但它的完整信息会保存在event-log里。

四、获取Executor启停时间与数量的方法

1. 直接解析Event Log

event-log是最权威的数据源,包含所有Executor的全生命周期事件:

  • 查找SparkListenerExecutorAdded事件:里面有Executor ID、创建时间(timestamp字段)、节点信息等。
  • 查找SparkListenerExecutorRemoved事件:里面有Executor ID、终止时间(timestamp字段)、移除原因。
  • 统计所有SparkListenerExecutorAdded事件的数量,就是总共启动过的Executor数量。
  • 你可以用Spark自带的History Server工具,或者自己写个简单的JSON脚本解析(event-log是逐行的JSON格式)。

2. Spark History Server REST API

用REST API能拿到结构化的Executor数据,比GUI更完整:

  • 请求地址:GET http://<history-server-host>:<port>/api/v1/applications/<app-id>/executors
  • 返回的每个Executor对象包含:
    • id:Executor ID
    • startTime:创建时间戳
    • endTime:终止时间戳(如果没销毁就是0)
    • removedReason:移除原因
  • 数返回列表的长度就是Executor总数,但要注意:部分Spark版本的API可能还是会过滤短生命周期的Executor,要是需要所有数据,优先解析event-log。

3. 实时获取(应用运行中)

如果应用还在跑,直接调用Driver的REST API:GET http://<driver-host>:<port>/api/v1/applications/<app-id>/executors,能拿到实时的Executor状态和时间信息。

内容的提问来源于stack exchange,提问作者Energizer1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 01:10:33