[]Hadoopのソースを読もう
TaskInProgress
TaskInProgress は,ある与えられた入力対するタスクの集合のことです.ここで,入力は,mapタスクに対する一分割(a split)やreduceタスクに対して一パーティションのことを言っています.
通常,ひとつの要素(tip)に対してひとつのタスクがあります.ただし,投機的実行とリトライ機構では,ひとつの入力に対して複数のタスクを作ることができるようになっています.
(注:Google::MapReduceでもこの機能はありましたね)
TaskInProgress は,二つのコンストラクタを持ちます.一つは,引数に,input FileSplitを取ります.もうひとつは,partition numberをとります.これらの二つの関数は.JobInProgress.initTask()から呼び出されます.
TaskInProgress は,以下を含みます.
・recentTasks, 現在実行中のタスクのインスタンスを示します.
getTaskToRun() は,recentTasksをMapTask やReduceTaskのインスタンスに置きつつ,!Taskを呼び出し元に返します.!Taskのidは,usableTaskidsというフィールドからゲットできます.
以下も注意してね.
・taskStatuses, taskに対するTaskStatusインスタンスを持っています.キーは,task idです.
updateStatus() は,最新の状態をtaskStatusesへ記録します.これは,tasktrackerがそのtaskstatusを含むようなハートビートを出力したときに動作します.
completed() or failedSubTask() は,recentTasksからtaskを取り除くことによってtaskの生存にピリオドを打ちます.それぞれ,
JobInProgress.completeTask() or failedTask()から呼び出されます.
TaskTracker.TaskInProgressというクラスがあります.これは,TaskTracker内部のものです.ほかのTaskInProgressとは違って,
TaskTracker.TaskInProgressは,!Taskと1:1のマッピングを持っています.つまり,ひとつの!Taskを示しています.
今日は,ここまで,なんだか眠い.