Job的任務執行流程之TaskCleanup

2021-06-05 13:42:32 字數 2440 閱讀 2810

任何乙個作業在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伺服器上進行執行的。具體...