MapReduce計算框架高級特性程序運行并發(fā)度
陽高ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!所謂的并發(fā)度,就是在MapReduce執(zhí)行程序的過程中有多少個map task進程和reduce task進程,來一起完成程序的處理。
MapReduce就是把業(yè)務處理邏輯變成分布式來處理。
reduce task 數(shù)量的決定機制 //全局的聚合操作 由業(yè)務場景決定
1、業(yè)務邏輯需要
2、數(shù)據(jù)量大小
設置方法:
job.setNumReduceTasks(5)
//reduce task的數(shù)量不能夠任意的指定,比如:我們在一大堆的英文文件中,我們要去統(tǒng)計有多少個單詞,這個時候reduce task在全局 程序執(zhí)行的過程中只能有1個,為什么呢?因為:需要讓所有的map task 把所有的結果給到一個reduce task 這樣reduce task 就會把所有的結果統(tǒng)計出來。在這種情況下reduce task就沒辦法用多個。
比如:在wordcount中,我們統(tǒng)計每一個單詞出現(xiàn)的總次數(shù),在這種情況下,reduce task就 可以由任意多個。因為,maptask處理的結果經過shuffle階段之后,相同的單詞只會出現(xiàn)在同一個reduce task中。我們可能會得到5個文件,但這5個文件中統(tǒng)計的單詞數(shù)量是全局唯一的。
map task 數(shù)量的決定機制:
由于map task 之間沒有協(xié)作關系,每一個map task 都是各自為政,在map task 的處理中沒法做“全局”性的聚合操作,所以map task 的數(shù)量完全取決于所處理的數(shù)據(jù)量的大小
決定機制:
對待處理數(shù)據(jù)進行“切片”
每一個切片分配一個map task 來處理
Mapreduce 框架中默認的切片機制:
TextInputFormat.getSplits()繼承自FileInputFormat.getSplits()
數(shù)據(jù)切片的思考
1:定義一個切片大小:可以通過參數(shù)來調節(jié),默認情況下等于“hdfs 中設置的blocksize”,通常是128M //一定程度上會減少網(wǎng)絡傳輸數(shù)據(jù),但并不是絕對的。
2:獲取輸入數(shù)據(jù)目錄下所有待處理文件List
3:遍歷文件List,逐個逐個文件進行切片
for(file:List)
對file 從0 偏移量開始切,每到128M 就構成一個切片,比如a.txt(200M),就會被切成兩個切片: a.txt: 0-128M, a.txt :128M-256M 再比如b.txt(80M),就會切成一個切片, b.txt :0-80M
如果要處理的數(shù)據(jù)是大量的小文件,使用上述這種默認切片機制,就會導致大量的切片,從而maptask 進程數(shù)特別多,但是每一個切片又非常小,每個maptask 的處理數(shù)據(jù)量就很小,從而,整體的效率會很低。通用解決方案:就是將多個小文件劃分成一個切片;實現(xiàn)辦法就是自定義一個Inputformat 子類重寫里面的getSplits 方法;
Mapreduce 框架中自帶了一個用于此場景的Inputformat 實現(xiàn)類:CombineFileInputformat
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。