获取所有Apache Spark执行程序日志

Dan*_*bos 8 apache-spark

我想以编程方式收集Spark应用程序驱动程序中的所有执行程序日志.(当出现故障时我想收集并存储所有相关日志.)有一个很好的方法吗?

一个想法是创建一个空的RDD,每个执行器有一个分区.然后,我以某种方式确保每个分区实际上在不同的执行器上处理(不知道如何)并mapPartitions执行从磁盘加载执行程序日志,然后将collect其提取到应用程序.

Gle*_*olt 5

也许有更好的方法,但是我们使用脚本每5秒将执行程序日志同步到S3

#!/bin/sh
# This scripts syncs executor log files to S3.

while [[ $# > 1 ]]; do
  key="$1"
  case $key in
    -l|--log-uri)
        LOG_BUCKET="$2"
        shift
        ;;
    *)
        echo "Unknown option: ${key}"
        exit 1;
  esac
  shift
done

set -u

JOB_FLOW_ID=$(cat /mnt/var/lib/info/job-flow.json | grep jobFlowId | sed -e 's,.*"\(j-.*\)".*,\1,g')

# Start background process that syncs every 5 seconds.
while true; do aws s3 sync /home/hadoop/spark/work ${LOG_BUCKET}/${JOB_FLOW_ID}/executors/`hostname`/; sleep 5; done &
Run Code Online (Sandbox Code Playgroud)

我们在引导操作中启动脚本(该脚本(存储在S3上名为sync-executor-logs.sh的文件中))

--bootstrap-actions Path=s3://path/to/my/script/sync-executor-logs.sh,Name=Sync-executor-logs,Args=[-l,s3://path/to/logfiles]
Run Code Online (Sandbox Code Playgroud)