Hadoop框架下MapReduce中的map個數(shù)如何控制

一個job的map階段并行度由客戶端在提交job時決定

客戶端對map階段并行度的規(guī)劃基本邏輯為:
一官疲、將待處理的文件進行邏輯切片(根據(jù)處理數(shù)據(jù)文件的大小途凫,劃分多個split)溢吻,然后每一個split分配一個maptask并行處理實例
二、具體切片規(guī)劃是由FileInputFormat實現(xiàn)類的getSplits()方法完成

切分規(guī)則如下:
1.簡單地按照文件的內(nèi)容長度進行切片
2.切片大小默認是datanode的切塊大小128M
3.切片時不是考慮一個整體數(shù)據(jù)集犀盟,而是針對每一個文件單獨切片
  比如待處理數(shù)據(jù)有兩個文件:
    file1.txt 200M
   file2.txt 50M
  經(jīng)過FileInputFormat的切片機制運算后阅畴,形成的切片信息如下:
   file1.txt.split1– 0~128M —–maptask
   file1.txt.split2– 128M~200M —–maptask
   file2.txt.split1– 0~50M —–maptask
三迅耘、如何改變切片大小(參數(shù)設(shè)置)
源碼是通過這個方法來規(guī)劃切片大小的

protected long computeSplitSize(long blockSize, long minSize,
                                  long maxSize) {
    return Math.max(minSize, Math.min(maxSize, blockSize));
  }

    minsize:默認值:1纽哥;配置參數(shù): mapreduce.input.fileinputformat.split.minsize   
    maxsize:默認值:Long.MAXValue春塌;  配置參數(shù):mapreduce.input.fileinputformat.split.maxsize
    blocksize:hdfs切片大小

調(diào)整切片大小結(jié)論:
maxsize(切片最大值):
  參數(shù)如果調(diào)得比blocksize小累魔,則會讓切片變小,而且就等于配置的這個參數(shù)的值
minsize (切片最小值):
  參數(shù)調(diào)的比blockSize大吕世,則可以讓切片變得比blocksize還大


控制map個數(shù)的核心源碼

long minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job));

//getFormatMinSplitSize 默認返回1梯投,getMinSplitSize 為用戶設(shè)置的最小分片數(shù), 如果用戶設(shè)置的大于1,則為用戶設(shè)置的最小分片數(shù)
long maxSize = getMaxSplitSize(job);

//getMaxSplitSize為用戶設(shè)置的最大分片數(shù)尔艇,默認最大為long 9223372036854775807L

long splitSize = computeSplitSize(blockSize, minSize,
                            maxSize);

protected long computeSplitSize(long blockSize, long minSize, long maxSize) {
        return Math.max(minSize, Math.min(maxSize, blockSize));
    }

由上述代碼可以看出在

maxSize默認等于long(長整形)

blockSize默認在hadoop2.0之后為128M

minSize默認等于1

因此默認的切片大小splitSize等于128M也就是說等于塊大小

一個切片對應于一個map任務终娃,因此在默認情況下一個塊對應于一個map任務。

要想人為控制map的個數(shù)可以從minSize和MaxSize入手余佛。

想要增加map的個數(shù)窍荧,可以將maxSize調(diào)整小于blockSize;想要減小map的個數(shù)蕊退,可以調(diào)整minSize>blockSize瓤荔。

具體調(diào)整可以在job配置中增加如下配置

FileInputFormat.setMinInputSplitSize(job, 301349250);//設(shè)置minSize
FileInputFormat.setMaxInputSplitSize(job, 10000);//設(shè)置maxSize
在實驗中准潭,

測試 文件大小 297M(311349250)

塊大小128M

測試代碼

FileInputFormat.setMinInputSplitSize(job, 301349250);

FileInputFormat.setMaxInputSplitSize(job, 10000);

測試后Map個數(shù)為1腔丧,由上面分片公式算出分片大小為301349250, 比 311349250小愉粤, 理論應該為兩個map, 這是為什么呢?在上源碼

while (bytesRemaining / splitSize > 1.1D) {
                        int blkIndex = getBlockIndex(blkLocations, length
                                - bytesRemaining);
                        splits.add(makeSplit(path, length - bytesRemaining,
                                splitSize, blkLocations[blkIndex].getHosts()));

                        bytesRemaining -= splitSize;
                    }

可以看出只要剩余的文件大小不超過分片大小的1.1倍如蚜, 則會分到一個分片中影暴,避免開兩個MAP, 其中一個運行數(shù)據(jù)太小撬呢,浪費資源妆兑。

總結(jié),分片過程大概為芯勘,先遍歷目標文件荷愕,過濾部分不符合要求的文件, 然后添加到列表狈癞,然后按照文件名來切分分片 (大小為前面計算分片大小的公式, 最后有個文件尾可能合并茂契,其實常寫網(wǎng)絡(luò)程序的都知道)慨绳, 然后添加到分片列表脐雪,然后每個分片讀取自身對應的部分給MAP處理

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市璧亚,隨后出現(xiàn)的幾起案子脂信,更是在濱河造成了極大的恐慌,老刑警劉巖疯搅,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幔欧,死亡現(xiàn)場離奇詭異丽声,居然都是意外死亡雁社,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門滋饲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屠缭,“玉大人箍鼓,你說我怎么就攤上這事『遣埽” “怎么了款咖?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長奄喂。 經(jīng)常有香客問我铐殃,道長,這世上最難降的妖魔是什么跨新? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任富腊,我火速辦了婚禮,結(jié)果婚禮上域帐,老公的妹妹穿的比我還像新娘赘被。我一直安慰自己,他們只是感情好民假,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著龙优,像睡著了一般羊异。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上彤断,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天野舶,我揣著相機與錄音,去河邊找鬼瓦糟。 笑死筒愚,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的菩浙。 我是一名探鬼主播巢掺,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼劲蜻!你這毒婦竟也來了陆淀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤先嬉,失蹤者是張志新(化名)和其女友劉穎轧苫,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡含懊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年身冬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岔乔。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡酥筝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出雏门,到底是詐尸還是另有隱情嘿歌,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布茁影,位于F島的核電站宙帝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏募闲。R本人自食惡果不足惜步脓,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蝇更。 院中可真熱鬧沪编,春花似錦、人聲如沸年扩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厨幻。三九已至,卻和暖如春腿时,著一層夾襖步出監(jiān)牢的瞬間况脆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工批糟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留格了,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓徽鼎,卻偏偏與公主長得像盛末,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子否淤,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容