トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

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ファイルだけコピーしてくれます。

手抜きシェルでごめんなさい。