大資料-Hadoop生態(14)-MapReduce框架原理-切片機制
1.FileInputFormat切片機制
切片機制
比如一個資料夾下有5個小檔案,切片時會切5個片,而不是一個片
案例分析
2.FileInputFormat切片大小的引數配置
原始碼中計算切片大小的公式
切片大小設定
獲取切片大小API
3. CombineTextInputFormat切片機制
框架預設的TextInputFormat切片機制是對任務按檔案規劃切片,不管檔案多小,都會是一個單獨的切片,都會交給一個MapTask,這樣如果有大量小檔案,就會產生大量的MapTask,處理效率極其低下。
1)應用場景
CombineTextInputFormat用於小檔案過多的場景,它可以將多個小檔案從邏輯上規劃到一個切片中,這樣,多個小檔案就可以交給一個MapTask處理。
2)虛擬儲存切片最大值設定
CombineTextInputFormat.setMaxInputSplitSize(job, 4194304);// 4m
注意:虛擬儲存切片最大值設定最好根據實際的小檔案大小情況來設定具體的值
3)切片機制
生成切片過程包括:虛擬儲存過程和切片過程二部分
(1)虛擬儲存過程:
將輸入目錄下所有檔案大小,依次和設定的setMaxInputSplitSize值比較,如果不大於設定的最大值,邏輯上劃分一個塊。如果輸入檔案大於設定的最大值且大於兩倍,那麼以最大值切割一塊;當剩餘資料大小超過設定的最大值且不大於最大值2倍,此時將檔案均分成2個虛擬儲存塊(防止出現太小切片)。
例如setMaxInputSplitSize值為4M,輸入檔案大小為8.02M,則先邏輯上分成一個4M。剩餘的大小為4.02M,如果按照4M邏輯劃分,就會出現0.02M的小的虛擬儲存檔案,所以將剩餘的4.02M檔案切分成(2.01M和2.01M)兩個檔案。
(2)切片過程:
(a)判斷虛擬儲存的檔案大小是否大於setMaxInputSplitSize值,大於等於則單獨形成一個切片。
(b)如果不大於則跟下一個虛擬儲存檔案進行合併,共同形成一個切片。
(c)測試舉例:有4個小檔案大小分別為1.7M、5.1M、3.4M以及6.8M這四個小檔案,則虛擬儲存之後形成6個檔案塊,大小分別為:
1.7M,(2.55M、2.55M),3.4M以及(3.4M、3.4M)
最終會形成3個切片,大小分別為:
(1.7+2.55)M,(2.55+3.4)M,(3.4+3.4)M