Как получить имена текущих запущенных рабочих заданий?

Мне нужно получить список имен заданий, которые в настоящее время запущены, но hadoop -job list дать мне список идентификаторов jobID.

  • Есть ли способ получить имена выполняемых заданий?
  • Есть ли способ получить имена заданий от идентификаторов jobID?

Ответ 1

Мне приходилось делать это несколько раз, поэтому я придумал следующую командную строку, которую вы можете вставить в script где-нибудь и повторно использовать. Он печатает задание, за которым следует имя задания.

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

Ответ 2

Если вы используете Hadoop YARN, не используйте mapred job -list (или его устаревшую версию hadoop job -list), просто выполните

yarn application -appStates RUNNING -list

Это также выводит имя приложения/задания. Для приложений mapreduce вы можете получить соответствующий JobId, заменив префикс application Application-Id на job.

Ответ 3

Модифицируя AnthonyF script, вы можете использовать следующие строки:

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

Ответ 4

Если вы выполните $HADOOP_HOME/bin/hadoop -job -status <jobid>, вы получите URL-адрес отслеживания на выходе. Переход на этот URL-адрес даст вам страницу отслеживания с именем

Job Name: <job name here>

Команда -status также предоставляет файл, который также можно увидеть из URL отслеживания. В этом файле находится mapred.job.name, у которого есть задание.

Я не нашел способ получить доступ к имени задания из командной строки. Не сказать, что нет... но не найдено мной.:)

URL-адрес отслеживания и XML файл, вероятно, являются вашими лучшими параметрами для получения имени задания.

Ответ 5

Вы можете найти информацию в 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

Ответ 6

Просто в случае, если кто-то интересуется последним запросом, чтобы получить название работы:-). Измененная команда Pirooz -

mapured 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}'

Ответ 7

Мне нужно было просмотреть историю, поэтому я изменил mapred job -list на mapred job -list all....

В итоге я добавил команду -L в команду curl, так что был блок:

curl -s -L -XGET {}

Это позволяет перенаправить, например, если работа ушла в отставку и в истории заданий. Я также обнаружил, что это JobName в истории HTML, поэтому я изменил 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)

Ответ 8

набрав в вашем терминале "jps".