【问题标题】:Get all Apache Spark executor logs获取所有 Apache Spark 执行程序日志
【发布时间】:2015-05-14 09:52:52
【问题描述】:

我想以编程方式收集 Spark 应用程序驱动程序中的所有执行程序日志。 (当发生故障时,我想收集并存储所有相关日志。)有没有好的方法来做到这一点?

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

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

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

    我们在引导操作中启动脚本(存储在 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]
    

    【讨论】:

    • 谢谢,这是一个不错的解决方案!现在我们主要在 YARN 上运行,YARN 为日志文件提供了一些处理。虽然我还没有完全弄清楚如何配置它,但它也解决了我们的许多问题。
    猜你喜欢
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    相关资源
    最近更新 更多