任何乙個作業在hadoop集群中執行主要包括四個階段:setup、map、reduce、cleanup,但在這四個階段都出現任務例項在tasktracker節點執行失敗的情況。當乙個任務例項在tasktracker節點的jvm中執行時除了成功執行意外,還有可能出現一些異常情況:1).在jvm中執行失敗;2).jvm程序被作業系統stop;3).任務例項被jobtracker節點要求kill;這些異常情況都會造成該任務例項執行的失敗,從而使得該任務進入failed、failed_unclean、killed
_unclean
等三種狀態中的某一種。這裡就有乙個問題了,乙個任務例項失敗時到底會進入哪一種狀態?這其實很好判斷:
1).如果乙個任務例項在jvm中執行時出現異常或錯誤而無法再繼續執行,同時在呼叫了該任務所屬作業對應的outputcimmitter
輸出提交器的aborttask()方法之後離開jvm的話,這個任務例項會進入failed
狀態;2).如果乙個任務例項在jvm中執行時出現異常或錯誤而無法再繼續執行,同時在沒有呼叫該任務所屬作業對應的outputcimmitter
輸出提交器的aborttask()方法就離開了jvm的話,這個任務例項會進入failed_unclean
狀態;3).如果乙個任務例項在jvm中正常執行時突然被停止了(如:任務例項所在的
jvm程序被osstop或者被tasktracker節點強制命令停止),此時還來不起呼叫該任務所屬作業對應的輸出提交器outputcimmitter的aborttask()方法
,所以它會進入killed
_unclean
狀態。本文將主要圍繞jobtracker節點對處於failed_unclean和killed
_unclean
狀態的任務例項
的處理來詳細地展開講解。
tasktracker在任務例項停止執行之後,就會把這個任務例項對應的狀態報告給jobtracker節點來處理,當然,前面說過,jobtracker節點是不會直接處理任何任務例項的狀態報告的,而是交給對應的jobinprogress來處理。對於處於failed_unclean和killed
_unclean
狀態的任務例項,jobinprogress
會將他們儲存在對應的待清理的任務佇列中,當然,乙個作業主要包含兩種這樣的任務佇列,一種儲存map型的任務例項,另一種儲存reduce型的任務例項,然後它會交給合適的tasktracker節點來執行對該任務的清理操作。這種清理工作就是前面所說的taskcleanup任務。這個處理過程是是很簡單的,對應的源**如下:
class jobinprogress else
// remove the task entry from jobtracker
jobtracker.removetaskentry(taskid);
}...
} ...}
public task obtaintaskcleanuptask(tasktrackerstatus tts, boolean ismapslot) throws ioexception
synchronized (this)
string tasktracker = tts.gettrackername();
if (!shouldrunontasktracker(tasktracker))
taskattemptid taskid = null;
taskinprogress tip = null;
if (ismapslot)
} else
}if (tip != null)
return null;
}}
tasktracker節點對taskcleanup任務的本地化和排程同jobsetup、jobcleanup、map、reduce任務是一樣,最終都會交給乙個jvm例項來負責執行。在jvm中,它主要會呼叫作業對應的輸出提交器outputcimmitter的aborttask()方法
,即放棄該任務,在file
outputcimmitter
實現中就是清理該任務例項在執行過程中所占用的臨時儲存空間。這裡要提醒的是,無論這個taskcleanup任務在jvm中執行成功或者失敗,或者在本地化時就出錯而被kill掉,它都會進入對應的
failed
或者killed
狀態:如果該
taskcleanup
任務處於
failed_unclean狀態,它就會進入
failed
狀態;和
如果該taskcleanup處於killed
_unclean
狀態,它就會進入killed
狀態。taskcleanup
任務被tasktracker節點執行完之後的處理同jobsetup、jobcleanup、map、reduce任務例項也是一樣的,所以就不再贅述了。
oracle 建立job定時執行任務
先建立乙個儲存過程 例如 清空乙個表 定義好自己的job declare job1 number begin dbms job.submit job1,pro job delete sysdate,trunc sysdate 1 每天清楚記錄 end 找到你的job,找到對應的job值 select...
HIVE JDBC任務執行流程
hive提供了多種訪問方式,其中jdbc是一種。通常通過jdbc訪問,可以規避使用者對hdfs metastore的直接訪問。本文研究研究一下hivejdbc執行任務的流程。主要流程分為三條線 1.執行任務,無返回。執行完成,獲取執行結果 boolean int 直接結束 2.執行任務,返回資料。執...
oracle資料庫JOB方式執行任務
在執行一些資料庫操作的時候,有的任務比較複雜,需要花費數個小時的時間。直接執行的話,有如果出現網路中斷或者vpn 斷掉時,往往會導致前功盡棄,有事不得不花費大量的時間在旁邊進行監控。而採用job方式的話,只要保證 沒有問題,可以確保一次執行成功,因為job是提交到oracle伺服器上進行執行的。具體...