1. split大小的計算公式
minSize=max{minSplitSize,mapred.min.split.size} (minSplitSize大小默認為1B)
maxSize=mapred.max.split.size(不在配置文件中指定時大小為Long.MAX_VALUE)
splitSize=max{minSize,min{maxSize,blockSize}}(注意,blockSize為文件在hdfs中的塊大小,比如我們先配置的dfs.block.size的值為67108864,也即64MB,后向分布式文件系統中存入一個1GB大小的文件A,該文件在hdfs中的塊大小為64MB;當我們更改dfs.block.size的值為33554432,即32MB是,此時A文件在分布式文件系統中的blockSize仍為64M,切記啊,這個就曾迷糊俺好長時間.....)
mapred.min.split.size、mapred.max.split.size、blockSize均可以再配置文件中配置,前面兩個在mapred-site.xml中,最后一個可在在hdfs-site.xml中進行配置,單位均為B。
2.map數是這樣計算方式
文件大小/splitSize>1.1,創建一個split0,文件剩余大小=文件大小-splitSize
.....
剩余文件大小/splitSize<=1.1 將剩余的部分作為一個split
每一個分片對應一個map任務,這樣map任務的數目也就顯而易見啦。