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

Spark Standalone模式下如何聚合指定应用的Executor日志?

Spark Standalone模式下聚合指定应用日志的方法

当然可以实现类似YARN的日志聚合效果,Spark Standalone本身没有内置的统一日志查询命令,但可以通过以下几种方式快速聚合指定application-id的所有Executor日志:

1. 直接用Shell命令聚合

利用Linux/Unix的文件操作命令,一次性将目标应用目录下所有Executor的stderr和stdout日志合并到一个文件中:

方法一:通配符直接拼接

cat /apache-spark/3.5.0/libexec/work/app-20231003110238-0000/*/{stderr,stdout} > app-20231003110238-0000-all.log

方法二:find命令灵活匹配

如果目录结构更复杂,或者需要过滤特定日志文件,用find命令更可靠:

find /apache-spark/3.5.0/libexec/work/app-20231003110238-0000 -type f \( -name "stderr" -o -name "stdout" \) -exec cat {} + > app-all-logs.log

2. 通过Spark Standalone UI查看/下载日志

访问Spark Master节点的UI(默认端口8080),找到目标应用的详情页面:

  • 在"Executors"列表中,每个Executor条目右侧有"Logs"链接,点击可在线查看该Executor的stderr和stdout
  • 日志页面提供"Download"按钮,可以单独下载每个Executor的日志文件,之后自行合并

3. 封装脚本简化操作

将上述Shell命令封装成可复用的脚本,避免每次手动输入路径:

#!/bin/bash
# 脚本功能:聚合指定Spark Standalone应用的所有Executor日志

if [ $# -ne 1 ]; then
    echo "用法: $0 <application-id>"
    exit 1
fi

APP_ID=$1
BASE_LOG_DIR="/apache-spark/3.5.0/libexec/work"
TARGET_DIR="${BASE_LOG_DIR}/${APP_ID}"
OUTPUT_FILE="${APP_ID}-combined-logs.log"

if [ ! -d "${TARGET_DIR}" ]; then
    echo "错误:找不到应用目录 ${TARGET_DIR}"
    exit 1
fi

find "${TARGET_DIR}" -type f \( -name "stderr" -o -name "stdout" \) -exec cat {} + > "${OUTPUT_FILE}"
echo "日志聚合完成,已保存到 ${OUTPUT_FILE}"

保存为aggregate-spark-standalone-logs.sh,添加执行权限后即可使用:

chmod +x aggregate-spark-standalone-logs.sh
./aggregate-spark-standalone-logs.sh app-20231003110238-0000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:13:37