1 回答

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