Hadoop源代碼分析(Task的內部類和輔助類)

從前面的圖中,咱們能夠發現Task有不少內部類,並擁有大量類成員變量,這些類配合Task完成相關的工做,以下圖。

 

MapOutputFile管理着Mapper的輸出文件,它提供了一系列get方法,用於獲取Mapper須要的各類文件,這些文件都存放在一個目錄下面。
咱們假設傳入MapOutputFile的JobID爲job_200707121733_0003,TaskID爲task_200707121733_0003_m_000005。MapOutputFile的根爲
{mapred.local.dir}/taskTracker/jobcache/{jobid}/{taskid}/output
在下面的討論中,咱們把上面的路徑記爲{MapOutputFileRoot}
以上面JogID和TaskID爲例,咱們有:
{mapred.local.dir}/taskTracker/jobcache/job_200707121733_0003/task_200707121733_0003_m_000005/output
須要注意的是,{mapred.local.dir}能夠包含一系列的路徑,那麼,Hadoop會在這些根路徑下找一個知足要求的目錄,創建所需的文件。MapOutputFile的方法有兩種,結尾帶ForWrite和不帶ForWrite,帶ForWrite用於建立文件,它須要一個文件大小做爲參數,用於檢查磁盤空間。不帶ForWrite用於獲取以創建的文件。
getOutputFile:文件名爲{MapOutputFileRoot}/file.out;
getOutputIndexFile:文件名爲{MapOutputFileRoot}/file.out.index
getSpillFile:文件名爲{MapOutputFileRoot}/spill{spillNumber}.out
getSpillIndexFile:文件名爲{MapOutputFileRoot}/spill{spillNumber}.out.index
以上四個方法用於Task子類MapTask中;
getInputFile:文件名爲{MapOutputFileRoot}/map_{mapId}.out
用於ReduceTask中。咱們到使用到他們的地方再介紹相應的應用場景。

介紹完臨時文件管理之後,咱們來看Task.CombineOutputCollector,它繼承自org.apache.hadoop.mapred.OutputCollector,很簡單,只是一個OutputCollector到IFile.Writer的Adapter,活都讓IFile.Writer幹了。

ValuesIterator用於從RawKeyValueIterator(Key,Value都是DataInputBuffer,ValuesIterator要求該輸入已經排序)中獲取符合RawComparator<KEY>comparator的值的迭代器。它在Task中有一個簡單子類,CombineValuesIterator。

Task.TaskReporter用於向JobTracker提交計數器報告和狀態報告,它實現了計數器報告Reporter和狀態報告StatusReporter。爲了避免影響主線程的工做,TaskReporter有一個獨立的線程,該線程經過TaskUmbilicalProtocol接口,利用Hadoop的RPC機制,向JobTracker報告Task執行狀況。

web

FileSystemStatisticUpdater用於記錄對文件系統的對/寫操做字節數,是個簡單的工具類。apache

更多精彩內容請關注:http://bbs.superwu.cn微信

關注超人學院微信二維碼:app

相關文章
相關標籤/搜索