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