web-dev-qa-db-ja.com

現在実行中のHadoopジョブの名前を取得するにはどうすればよいですか?

現在実行中のジョブ名のリストを取得する必要がありますが、hadoop -job listjobIDのリストを教えてください。

  • 実行中のジョブの名前を取得する方法はありますか?
  • JobIDからジョブ名を取得する方法はありますか?
17
Karthik

これを何度も実行する必要があったので、スクリプトをどこかにスローして再利用できる次のコマンドラインを思いつきました。ジョブ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>//'"
26
AnthonyF

Hadoop YARNを使用する場合は、mapred job -list(またはその非推奨バージョンhadoop job -list)を使用しないでください。

yarn application -appStates RUNNING -list

また、アプリケーション/ジョブ名も出力されます。 mapreduceアプリケーションの場合、Application-IdJobIdプレフィックスをapplicationに置き換えることで、対応するjobを取得できます。

10
David Ongaro

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>.*//'"
3
Pirooz

もしあなたがそうするなら $HADOOP_HOME/bin/hadoop -job -status <jobid>出力にトラッキングURLが表示されます。そのURLに移動すると、名前の付いた追跡ページが表示されます

Job Name: <job name here>

-statusコマンドもファイルを提供します。これは、トラッキングURLからも確認できます。このファイルにはmapred.job.nameジョブ名があります。

コマンドラインからジョブ名にアクセスする方法が見つかりませんでした。ないのは言うまでもありません...しかし私には見つかりませんでした。 :)

追跡URLおよびxml ファイルは、おそらくジョブ名を取得するための最良のオプションです。

1
QuinnG

情報はJobTrackerUIにあります

あなたが見ることができます

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 

[〜#〜]情報[〜#〜]

0

履歴を調べる必要があったので、mapred job -listmapred job -list all...に変更しました。

最終的にcurlコマンドに-Lを追加したので、ブロックは次のようになりました。

curl -s -L -XGET {}

これにより、ジョブがリタイアした場合やジョブ履歴にある場合など、リダイレクトが可能になります。また、履歴HTMLでJobNameであることがわかったので、grepを変更しました。

grep 'Job.*Name' 

さらに、もちろんhadoopmapredに変更します。完全なコマンドは次のとおりです。

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)

0
Sheeri

念のため、ジョブ名を取得するための最新のクエリに興味がある人は:-)。変更された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}'

0
Naresh Jangra