Hadoop:スレーブのstderrログを収集する
Last-modified: 2013-08-24 (土) 02:14:21 (3898d)
Top / Hadoop:スレーブのstderrログを収集する
Hadoop:スレーブのstderrログを収集する †
必要だったので作りました。
こんな感じです。
■harvestJobErrLog?.sh
#!/bin/bash if [ $# -ne 1 ] then echo "ERROR: No input args" exit 255 fi JOB_ID=$1 OUTDIR=${JOB_ID}/ mkdir ${OUTDIR} while read target_host do ssh -n ${target_host} "ls -1 /var/log/hadoop/userlogs/attempt_${JOB_ID}_*/stderr" > ./tmperrlist while read tlog do tfilename=`echo ${tlog} | awk -F/ '{print $6$7}'` scp ${target_host}:/${tlog} ${OUTDIR}${tfilename}_${target_host} done < tmperrlist echo "${target_host} is done" done < hostlist.txt
slaveのログのディレクトリは適宜変更して使ってください。
このシェルとは別にhostlist.txtファイルが必要です。
■hostlist.txt
slave01 slave02 slave03
以下のような感じで実行できます。
実行ユーザ | hadoop(スレーブサーバにssh認証設定がされているユーザ) |
実行形式 | harvestJobErrLog?.sh JOB_ID |
引数のJOB_IDについて | 頭の「job_」を取った値。 |
実行例は以下の通り。
harvestJobErrLog.sh 201103251444_1959
すると、引数で指定したジョブIDでディレクトリを掘って、適当にファイル名がかぶらないようにstderrファイルだけコピーしてくれます。
手抜きシェルでごめんなさい。