1 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊
圖例:map個(gè)數(shù):由任務(wù)切片spilt決定的,默認(rèn)情況下一個(gè)split的大小就是block由參與任務(wù)的文件個(gè)數(shù)決定的 maxSize:由配置參數(shù)mapred.max.spilt.size確定,已經(jīng)不考慮用戶(hù)設(shè)定的maptask個(gè)數(shù);minSize:inputSplit的最小值,由配置參數(shù)mapred.min.spilt.size確定,默認(rèn)值為1;BlockSize:HDFS中塊的大小splitSize=max(minsplitSzie,min(maxsplitSize,blockSize=128M))fileSzie/splitSzie=split個(gè)數(shù)conf.setLong("mapred.max.split.size",splitSize)conf.setLong("mapred.min.split.size",splitSize)按照正常方式,當(dāng)最后兩個(gè)切片小于blockSize大小的110%,會(huì)合并成一個(gè)block.對(duì)于大文件,一般選擇split=block,如果split<block 則會(huì)增加map執(zhí)行的并發(fā)度,但是會(huì)造成在節(jié)點(diǎn)之間拉取數(shù)據(jù)對(duì)于小文件,默認(rèn)一個(gè)文件啟動(dòng)一個(gè)map,這樣會(huì)啟動(dòng)多個(gè)map,增大節(jié)點(diǎn)資源消耗,此時(shí)可以使用使用InputFormat(下面有源碼)將多個(gè)小文件加入到一個(gè)split,并適當(dāng)增大split的大小,這樣會(huì)減少map啟動(dòng)的個(gè)數(shù),減少并發(fā)度,減少資源消耗reduce個(gè)數(shù):由分區(qū)個(gè)數(shù)決定 可以由用戶(hù)在程序中Driver自定義job.setNumReduceTasks(3);一個(gè)ruduce對(duì)應(yīng)一個(gè)結(jié)果文件partitionpartiton(分區(qū)):用來(lái)指定map輸出的key交給哪個(gè)reuducer處理 默認(rèn)是通過(guò)對(duì)map輸出的key取hashcode (hashcode值唯一且對(duì)于數(shù)字和字母都可以進(jìn)行處理)對(duì)指定的reduce個(gè)數(shù)求模(取余)key.hashcode() % N=job.setNumReduceTasks(n)Group 分組:map輸出的相同key放到一個(gè)分組Sort 排序: 根據(jù)key進(jìn)行排序
- 1 回答
- 0 關(guān)注
- 1297 瀏覽
添加回答
舉報(bào)