我在MRv1上使用CDH4。據我所知,沒有命令行工具來檢查已完成作業的「狀態」。當我轉到Web控制檯作業詳細信息頁面時,可以看到「狀態:失敗」或「狀態:成功」。如果我運行mapred job -list all
或mapred job -status job_201309231203_0011
,則既不指示「失敗」,也不指示「成功」。如何從命令行獲取Hadoop作業的成功/失敗狀態?
我是否缺少一些其他命令?輸出的hadoop job -list all
我在MRv1上使用CDH4。據我所知,沒有命令行工具來檢查已完成作業的「狀態」。當我轉到Web控制檯作業詳細信息頁面時,可以看到「狀態:失敗」或「狀態:成功」。如果我運行mapred job -list all
或mapred job -status job_201309231203_0011
,則既不指示「失敗」,也不指示「成功」。如何從命令行獲取Hadoop作業的成功/失敗狀態?
我是否缺少一些其他命令?輸出的hadoop job -list all
拳頭幾行是:
X jobs submitted
States are:
Running : 1 Succeded : 2 Failed : 3 Prep : 4
JobId State StartTime UserName Priority SchedulingInfo
和輸出樣子的行:
job_201309171413_38136 1 1382455374980 somebody NORMAL 0 running map tasks using 0 map slots. 0 additional slots reserved. 1 running reduce tasks using 1 reduce slots. 0 additional slots reserved.
job_201309171413_37222 2 1382430339635 somebody NORMAL 0 running map tasks using 0 map slots. 0 additional slots reserved. 0 running reduce tasks using 0 reduce slots. 0 additional slots reserved.
這第二列是作業的State
。基於標題行,1
表示Running
和2
表示Succeeded
。它並不是最清晰的格式:4行標題,需要引用標題來確定狀態碼實際意味着什麼,並且沒有辦法獲得只有一個工作的狀態。
分析此輸出特定工作的最簡單的方法是:
$ job_id=job_201309171413_38136
$ hadoop job -list all | awk -v job_id=${job_id} 'BEGIN{OFS="\t"; FS="\t"; final_state="Unknown"} $0 == "States are:" {getline; for(i=1;i<=NF;i++) { split($i,s," "); states[s[3]] = s[1] }} $1==job_id { final_state=states[$2]; exit} END{print final_state}'
Running
$ job_id=job_201309171413_37222
$ hadoop job -list all | awk -v job_id=${job_id} 'BEGIN{OFS="\t"; FS="\t"; final_state="Unknown"} $0 == "States are:" {getline; for(i=1;i<=NF;i++) { split($i,s," "); states[s[3]] = s[1] }} $1==job_id { final_state=states[$2]; exit} END{print final_state}'
Succeeded
$ job_id=foobar
$ hadoop job -list all | awk -v job_id=${job_id} 'BEGIN{OFS="\t"; FS="\t"; final_state="Unknown"} $0 == "States are:" {getline; for(i=1;i<=NF;i++) { split($i,s," "); states[s[3]] = s[1] }} $1==job_id { final_state=states[$2]; exit} END{print final_state}'
Unknown
我的Hadoop版本是2.5.0.This對我的作品
首先得到JOB_ID使用
hadoop job -list
然後通過獲得job_id
hadoop job -status {job_id}
你能確認你使用的是哪個版本的hadoop嗎?我使用的是CDH4 MRv1(即Hadoop 1.x),當時hadoop job -status {job_id}沒有指出失敗狀態(至少根據我的問題)。也許你的版本現在有這些信息? –
我正在使用hadoop-2.5.0 – userRaj
好的,這是有道理的。也許編輯你的答案來澄清你的版本,讓其他人知道?謝謝! –
謝謝!我認爲一定有一些顯而易見的東西是我錯過的:P –