Hadoopのソースを読もう

しまった,ココmapreduceに関連するクラスの説明があったよ.なので,いったんソースを追いかるのをペンディング



JobInProgress




JobInProgressは,JobTrackerによって追跡されているジョブを表現しています.JobInProgressはTaskInProgressインスタンスを要素荷物二つのセットを持ちます.

・TaskInProgress maps, split ひとつに対してひとつ持ちます.

・TaskInProgress reduce
,partition ひとつに対してひとつ持ちます.これらは,findNewTask()へ実装を任せます.その関数は,以下のような要素を探します.

・要素に対するcachedTasksを探すわけですが,このとき,その要素の入力が与えられたホストで管理されています.ただし,もし,すでに同じ入力が別のtaskによって処理されている場合には選択しません.また,入力の読み込みに失敗している場合には洗濯しません.

・regular task,これは,まだ実行されていない入力を用いる要素をあらわします.

・speculative tasks, これは,すでに別のタスクによってある入力データに対して処理が実行されているが,処理が遅い要素です.

・a failed tip,これはすでに失敗したタスクを示します.



(なんだかよくわからないが..)それを少しランダムにするために,cachedTasksの後で行う検索は,firstMpasToTryまたはfirstReduceToTryからはじめる.この二つは,最近「失敗したタスクの入力+1」にセットされる.



!Task statusは,JobTrackerがJobInProgress.updateTaskStatus()を呼び出したときに更新される.でそれは,JobTracker.emitHeartbeat() が TaskTrackerの heartbeatを処理した時に呼び出される.updateTaskStatus()は, TaskInProgress.updateStatus()を呼び出します.

もし,ある要素が成功/失敗を言ってきた場合には,updateTaskStatus()は,completedTask()/failedTask()を呼び出します.completeTask()は,その要素が最後のpartitionかを調べます.もしそうならjobは終了です.failedTask()は,すでに何回も失敗しているのでやめるかどうかを判定します.もしやめるならjobは失敗します.すでに起動したタスクがハートビートを返さずにタイムアウトした場合やTaskTrackerがそのタスクを失った場合には,JobTrackerはfailedTask()を直接よぶことができる.



job スケジュールの状態は,JobStatus statusに更新されている.