您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Task的內(nèi)部類和輔助類是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Task的內(nèi)部類和輔助類是什么”吧!
Task有很多內(nèi)部類,并擁有大量類成員變量,這些類配合Task完成相關(guān)的工作,如下圖。
MapOutputFile管理著Mapper的輸出文件,它提供了一系列g(shù)et方法,用于獲取Mapper需要的各種文件,這些文件都存放在一個目錄下面。
我們假設(shè)傳入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的方法有兩種,結(jié)尾帶ForWrite和不帶ForWrite,帶ForWrite用于創(chuàng)建文件,它需要一個文件大小作為參數(shù),用于檢查磁盤空間。不帶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中。我們到使用到他們的地方再介紹相應(yīng)的應(yīng)用場景。
介紹完臨時文件管理以后,我們來看Task.CombineOutputCollector,它繼承自org.apache.hadoop.mapred.OutputCollector,很簡單,只是一個OutputCollector到IFile.Writer的Adapter,活都讓IFile.Writer干了。
ValuesIterator用于從RawKeyValueIterator(Key,Value都是DataInputBuffer,ValuesIterator要求該輸入已經(jīng)排序)中獲取符合RawComparator<KEY>comparator的值的迭代器。它在Task中有一個簡單子類,CombineValuesIterator。
Task.TaskReporter用于向JobTracker提交計數(shù)器報告和狀態(tài)報告,它實現(xiàn)了計數(shù)器報告Reporter和狀態(tài)報告StatusReporter。為了不影響主線程的工作,TaskReporter有一個獨立的線程,該線程通過TaskUmbilicalProtocol接口,利用Hadoop的RPC機制,向JobTracker報告Task執(zhí)行情況。
FileSystemStatisticUpdater用于記錄對文件系統(tǒng)的對/寫操作字節(jié)數(shù),是個簡單的工具類。
到此,相信大家對“Task的內(nèi)部類和輔助類是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。