1. split是邏輯分片,再mapTask任務(wù)開始前,將文件按照指定的大小進行邏輯切分。每一個部分稱之為一個split。
默認情況下,split的大小與block的大小相等。均為128M.
2. 可以參考FileInputForamt類的getSplits()源碼
1. 會先獲取三個參數(shù)的值,minSize,maxSize,blockSize
2. 然后創(chuàng)建一個分片集合用于存儲分片數(shù)據(jù)
3. 獲取文件的所有塊信息,進行遍歷
4. 得到一個塊的狀態(tài)信息,然后判斷是否可以切分
5. 然后根據(jù)三個參數(shù)獲取分片大小
6. 循環(huán)判斷文件剩余部分是否大于切片大小的1.1倍,
1. 大于的話就調(diào)用makeSplit方法創(chuàng)建當(dāng)前塊的邏輯分片
2. 不大于的話,就將文件剩余的部分創(chuàng)建一個唯一的最后一個分片。
7. 將每一個邏輯分片添加到分片集合中,等待被使用
3. 分片的大小由minSize,maxSize,blockSize
三個參數(shù)決定 算法如下: Math.max(minSize,Math.min(maxSize, blockSize)),其中maxSize是取得longValueMax的值
1. 如果blockSize小于maxSize && blockSize 大于 minSize之間,那么split就是blockSize;
2. 如果blockSize小于maxSize && blockSize小于minSize之間,那么split就是minSize;
3. 如果blockSize大于maxSize && maxSize大于minSize之間,那么split就是maxSize;
4. 如果blockSize大于maxSize && maxSize小于 minSize之間,那么split就是maxSize(不存在這種關(guān)系)。