本篇內容主要講解“Task的內部類和輔助類是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Task的內部類和輔助類是什么”吧!
創(chuàng)新互聯公司長期為上千客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態(tài)環(huán)境。為葉縣企業(yè)提供專業(yè)的成都做網站、網站建設,葉縣網站改版等技術服務。擁有十余年豐富建站經驗和眾多成功案例,為您定制開發(fā)。
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用于創(chuàng)建文件,它需要一個文件大小作為參數,用于檢查磁盤空間。不帶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
Task.TaskReporter用于向JobTracker提交計數器報告和狀態(tài)報告,它實現了計數器報告Reporter和狀態(tài)報告StatusReporter。為了不影響主線程的工作,TaskReporter有一個獨立的線程,該線程通過TaskUmbilicalProtocol接口,利用Hadoop的RPC機制,向JobTracker報告Task執(zhí)行情況。
FileSystemStatisticUpdater用于記錄對文件系統(tǒng)的對/寫操作字節(jié)數,是個簡單的工具類。
到此,相信大家對“Task的內部類和輔助類是什么”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!