如何汇总Spark作业中Executor的计算时间以统计整体资源使用率
汇总Spark作业所有任务的Executor计算时间的方法
以下是几种实用的方法,可快速统计260K任务规模Spark作业的总Executor计算时间:
方法一:Spark UI/History Server 内置统计
- 打开Spark UI(或History Server),进入目标作业的Jobs页面,点击对应作业后切换到Stages标签页。
- 每个Stage的统计区域会显示该Stage下所有任务的总Executor计算时间(通常标注为
Executor Computing Time),直接将所有Stage的该数值累加,即可得到整个作业的总Executor计算时间。若作业包含多个Job,需累加所有Job下的Stage时间。
方法二:解析Spark事件日志
- 确保作业运行前已开启事件日志(配置
spark.eventLog.enabled=true),Spark会生成包含所有任务细节的JSON格式事件日志。 - 编写脚本提取每个任务的
executorRunTime字段(单位毫秒)并求和,示例Python脚本:
import json total_exec_time_ms = 0 # 替换为你的事件日志路径 log_path = "/path/to/spark/event/logs/app-xxxxxx" with open(log_path, "r") as log_file: for line in log_file: try: event = json.loads(line) if event.get("Event") == "TaskEnd": task_metrics = event.get("TaskMetrics", {}) total_exec_time_ms += task_metrics.get("executorRunTime", 0) except json.JSONDecodeError: continue print(f"总Executor计算时间:{total_exec_time_ms / 1000:.2f} 秒")
方法三:命令行日志分析
- 若作业日志(如YARN容器日志、本地Spark运行日志)中包含任务执行时间信息,可通过命令行工具批量提取求和:
# 假设日志中存在形如"executorRunTime: 1234"的记录 grep -E "executorRunTime: [0-9]+" spark-job-logs/*.log | awk '{sum += $2} END {print "总Executor计算时间:" sum/1000 " 秒"}'
资源使用率计算参考
得到总Executor计算时间后,可通过以下公式估算集群资源使用率:资源使用率 = 总Executor计算时间 / (集群总CPU核数 × 作业总运行时间) × 100%
内容的提问来源于stack exchange,提问作者Brian Mo
相关产品推荐
相关产品推荐

