十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
MR編程模型主要分為五個(gè)步驟:輸入、映射、分組、規(guī)約、輸出。
創(chuàng)新互聯(lián)建站自2013年起,先為衡山等服務(wù)建站,衡山等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為衡山企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。輸入(InputFormat):
主要包含兩個(gè)步驟—數(shù)據(jù)分片、迭代輸入
數(shù)據(jù)分片(getSplits):數(shù)據(jù)分為多少個(gè)splits,就有多少個(gè)map task;
單個(gè)split的大小,由設(shè)置的split.minsize和split.maxsize決定;
公式為 max{minsize, min{maxsize, blocksize}};
hadoop2.7.3之前blocksize默認(rèn)64M,之后默認(rèn)128M。
決定了單個(gè)split大小之后,就是hosts選擇,一個(gè)split可能包含多個(gè)block(將minsize設(shè)置大于128M);
而多個(gè)block可能分布在多個(gè)hosts節(jié)點(diǎn)上(一個(gè)block默認(rèn)3備份,如果4個(gè)block就可能在12個(gè)節(jié)點(diǎn)),getsplits會(huì)選擇包含數(shù)據(jù)最多的一部分hosts。
由此可見,為了讓數(shù)據(jù)本地話更合理,最好是一個(gè)block一個(gè)task,也就是說split大小跟block大小一致。
getSplits會(huì)產(chǎn)生兩個(gè)文件
job.split:存儲(chǔ)的主要是每個(gè)分片對應(yīng)的HDFS文件路徑,和其在HDFS文件中的起始位置、長度等信息(map task使用,獲取分片的具體位置);
job.splitmetainfo:存儲(chǔ)的則是每個(gè)分片在分片數(shù)據(jù)文件job.split中的起始位置、分片大小和hosts等信息(主要是作業(yè)初始化時(shí)使用,用于map task的本地化)。
迭代輸入:迭代輸入一條條的數(shù)據(jù),對于文本數(shù)據(jù)來說,key就是行號、value當(dāng)前行文本。
map task總共可以五個(gè)過程:read、map、collect、splill、conbine。
Read:從數(shù)據(jù)源讀入一條條數(shù)據(jù);
map:將數(shù)據(jù)傳給map函數(shù),變成另外一對KV
collect階段:
主要是map處理完的數(shù)據(jù),先放入內(nèi)存的環(huán)形緩沖區(qū)中,待環(huán)形緩沖區(qū)的值超過一定比例的時(shí)候再執(zhí)行下一步的spill到磁盤;
collect()內(nèi)部會(huì)調(diào)用getPartition來進(jìn)行分區(qū),而環(huán)形緩沖區(qū)則存儲(chǔ)的是K、V和partition號
這里采用的兩級索引結(jié)構(gòu),主要是排序時(shí)在同一個(gè)partition內(nèi)排序,所以先排partition,再排partition內(nèi)部數(shù)據(jù)。
kvindices中記錄的分區(qū)號、key開始的位置、value開始的位置,也就是一對兒KV在kvindices中占用3個(gè)int,kvoffsets只記錄一對KV在kvindices中的偏移地址,所以只需要一個(gè)int,所以二者按1:3的大小分配內(nèi)存。
spill過程:
環(huán)形緩存區(qū)中內(nèi)存數(shù)據(jù)在超過一定閾值后會(huì)spill到磁盤上,在splill到磁盤上之前會(huì)先在內(nèi)存中進(jìn)行排序(快速排序);
之后按分區(qū)編號分別寫到臨時(shí)文件,同一個(gè)分區(qū)編號后面會(huì)有個(gè)數(shù)字,表示第幾次溢寫,conbine:對多個(gè)文件合并,多倫遞歸,沒輪合并最小的n個(gè)文件。
reduce總共可分為以下幾個(gè)階段:shuffle、merge、sort、reduce、write
shuffle:從JobTracker中獲取已完成的map task列表以及輸出位置,通過http接口獲取數(shù)據(jù);
merge:shuffle拉去的數(shù)據(jù)線放入內(nèi)存,內(nèi)存不夠再放入磁盤,會(huì)有一個(gè)線程不斷地合并內(nèi)存和磁盤中的數(shù)據(jù)
sort:reduce從不同的map task中拉取到多個(gè)有序文件,然后再做一次歸并排序,則每個(gè)reduce獲取到文件就都是有序的了
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。