如何获取当前正在运行的hadoop作业的名称?

时间:2011-05-05 03:54:04

标签: hadoop

我需要获取当前正在运行的作业名称列表,但是hadoop -job list会给我一个jobID列表。

  • 有没有办法获取正在运行的工作的名字?
  • 有没有办法从jobID获取作业名称?

8 个答案:

答案 0 :(得分:26)

我必须多次执行此操作,因此我提出了以下命令行,您可以将其放入某个脚本并重用。它打印jobid,后跟作业名称。

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>//'"

答案 1 :(得分:8)

如果您使用Hadoop YARN,请不要使用mapred job -list(或已弃用的版本hadoop job -list),只需执行

yarn application -appStates RUNNING -list

这也打印出应用程序/作业名称。对于mapreduce应用程序,您可以使用JobId替换application的{​​{1}}前缀来获取相应的Application-Id

答案 2 :(得分:3)

修改AnthonyF的脚本,您可以在纱线上使用以下内容:

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 :(得分:1)

如果您执行$HADOOP_HOME/bin/hadoop -job -status <jobid>,则会在输出中获得跟踪网址。转到该URL将为您提供跟踪页面,其名称为

Job Name: <job name here>

-status命令还提供了一个文件,也可以从跟踪网址中看到。在此文件中是mapred.job.name,其中包含作业名称。

我没有找到从命令行访问作业名称的方法。不是说没有...但是没有找到我。 :)

跟踪网址和xml 文件可能是获取作业名称的最佳选择。

答案 4 :(得分:0)

您可以在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 

INFO

答案 5 :(得分:0)

以防任何一个对最新查询感兴趣的人获得工作名称:-)。修改后的Pirooz命令 -

mapred job -list 2&gt; / dev / null | egrep'^ job'| awk'{print $ 1}'| xargs -n 1 -I {} sh -c“mapred job -status {} 2&gt; / dev / null | egrep'Pob File'”| awk'{print $ 3}'| xargs -n 1 -I {} sh -c“hadoop fs -cat {} 2&gt; / dev / null”| egrep'mapreduce.job.name'| awk -F“”'{print $ 2}'| awk -F“”'{print $ 1}'

答案 6 :(得分:0)

我需要查看历史记录,因此我将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)

答案 7 :(得分:-1)

输入&#34; jps&#34;在你的终端。