現在実行中のジョブ名のリストを取得する必要がありますが、hadoop -job list
jobIDのリストを教えてください。
これを何度も実行する必要があったので、スクリプトをどこかにスローして再利用できる次のコマンドラインを思いつきました。ジョブIDに続いてジョブ名を出力します。
hadoop job -list | egrep '^job' | awk '{print $1}' | xargs -n 1 -I {} sh -c "hadoop job -status {} | egrep '^tracking' | awk '{print \$3}'" | xargs -n 1 -I{} sh -c "echo -n {} | sed 's/.*jobid=//'; echo -n ' ';curl -s -XGET {} | grep 'Job Name' | sed 's/.* //' | sed 's/<br>//'"
Hadoop YARNを使用する場合は、mapred job -list
(またはその非推奨バージョンhadoop job -list
)を使用しないでください。
yarn application -appStates RUNNING -list
また、アプリケーション/ジョブ名も出力されます。 mapreduceアプリケーションの場合、Application-Id
のJobId
プレフィックスをapplication
に置き換えることで、対応するjob
を取得できます。
AnthonyFのスクリプトを変更すると、Yarnで次を使用できます。
mapred job -list 2> /dev/null | egrep '^\sjob' | awk '{print $1}' | xargs -n 1 -I {} sh -c "mapred job -status {} 2>/dev/null | egrep 'Job File' | awk '{print \$3}'" | xargs -n 1 -I{} sh -c "hadoop fs -cat {} 2>/dev/null | egrep 'mapreduce.job.name' | sed 's/.*<value>//' | sed 's/<\/value>.*//'"
もしあなたがそうするなら $HADOOP_HOME/bin/hadoop -job -status <jobid>
出力にトラッキングURLが表示されます。そのURLに移動すると、名前の付いた追跡ページが表示されます
Job Name: <job name here>
-status
コマンドもファイルを提供します。これは、トラッキングURLからも確認できます。このファイルにはmapred.job.name
ジョブ名があります。
コマンドラインからジョブ名にアクセスする方法が見つかりませんでした。ないのは言うまでもありません...しかし私には見つかりませんでした。 :)
追跡URLおよびxml ファイルは、おそらくジョブ名を取得するための最良のオプションです。
情報はJobTracker
UIにあります
あなたが見ることができます
Jobid
Priority
User
Name of the job
State of the job whether it succeed or failed
Start Time
Finish Time
Map % Complete
Reduce % Complete etc
履歴を調べる必要があったので、mapred job -list
をmapred job -list all
...に変更しました。
最終的にcurlコマンドに-L
を追加したので、ブロックは次のようになりました。
curl -s -L -XGET {}
これにより、ジョブがリタイアした場合やジョブ履歴にある場合など、リダイレクトが可能になります。また、履歴HTMLでJobNameであることがわかったので、grepを変更しました。
grep 'Job.*Name'
さらに、もちろんhadoop
をmapred
に変更します。完全なコマンドは次のとおりです。
mapred job -list all | egrep '^job' | awk '{print $1}' | xargs -n 1 -I {} sh -c "mapred job -status {} | egrep '^tracking' | awk '{print \$3}'" | xargs -n 1 -I{} sh -c "echo -n {} | sed 's/.*jobid=//'; echo -n ' ';curl -s -L -XGET {} | grep 'Job.*Name' | sed 's/.* //' | sed 's/<br>//'"
(また、最初のgrepを変更して、特定のユーザー名のみを表示するようにしました.... YMMV)
念のため、ジョブ名を取得するための最新のクエリに興味がある人は:-)。変更されたPiroozコマンド-
mapred job -list 2>/dev/null | egrep '^ job' | awk '{print $ 1}' | xargs -n 1 -I {} sh -c "mapred job -status {} 2>/dev/null | egrep 'ジョブファイル'" | awk '{print $ 3}' | xargs -n 1 -I {} sh -c "hadoop fs -cat {} 2>/dev/null" | egrep'mapreduce.job.name '| awk -F "" '{print $ 2}' | awk -F "" '{print $ 1}'