2015-05-14 19 views
5

Tüm uygulama günlüklerini Spark uygulama sürücüsünde programlı olarak toplamak istiyorum. (Bir şey başarısız olduğunda, tüm ilgili günlükleri toplamak ve saklamak istiyorum.) Bunu yapmak için iyi bir yol var mı?Tüm Apache Spark yürütücüsü kayıtlarını alın

Bir fikir, yürütme başına bir bölümle boş bir RDD oluşturmaktır. Daha sonra her bölümün gerçekten farklı bir yürütücüde işlendiğinden emin olun (nasıl bir fikir yok) ve yürütme günlüğünü diskten yüklediğim bir mapPartitions ve daha sonra bunları uygulamaya almak için bir collect yapın.

cevap

3

Belki daha iyi bir yolu vardır, ama biz her 5 saniyede

#!/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 & 

Biz dosya adında senkronizasyon executor- içinde S3 depolanan komut dosyası (başlatmak S3 infaz günlükleri senkronize etmek için bir komut dosyası kullanmak logs.sh) bir önyükleme eyleminde

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

Teşekkürler, bu güzel bir çözüm! Günümüzde çoğunlukla YARN üzerinde çalışıyoruz ve YARN günlük dosyaları için bazı işlemler sunuyor. Bunu nasıl yapılandıracağımı tam olarak anlayamadığım halde, birçok sorunumuzu da çözdü. –

İlgili konular