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

时间:2015-05-14 09:52:53

标签: apache-spark

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

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

1 个答案:

答案 0 :(得分:4)

也许有更好的方法,但我们使用脚本每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 &

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

--bootstrap-actions Path=s3://path/to/my/script/sync-executor-logs.sh,Name=Sync-executor-logs,Args=[-l,s3://path/to/logfiles]