資料塊:block
是hdfs
物理上把資料分成一塊一塊。
資料切片:資料切片只是在邏輯上對輸入進行分片,並不會在磁碟上將其切分成片進行儲存。
假設切片大小設定成100m
(1)乙個job的map階段並行度由客戶端在提交job時的切片數決定
(2)每乙個split切片分配乙個maptask並行例項處理
(3)預設情況下,切片大小=blocksize
(4)切片時不考慮資料集整體,而是逐個針對每乙個檔案單獨切片
(1)程式先找到資料儲存的目錄
(2)開始遍歷目錄下的每乙個檔案
i)獲取檔案大小fs.sizeof(test.txt)
ii)計算切片大小
computesplitsize(math.max(minsize,math.min(maxsize,blocksize)))
iii)每次切片都要判斷切完剩下的部分是否大於塊的1.1倍,不大於1.1倍就劃分為一塊切片
iv)將切片資訊寫入乙個切片規劃檔案中
v)整個切片核心過程在getsplit()方法中完成
vi)inputsplit只記錄切片的元資料資訊,比如起始位置,長度以及所在的節點列表等
(1)math.max(minsize,math.min(maxsize,blocksize))
minsize預設是1,maxsize預設是long.maxvalue
預設切片大小是blocksize
(2)切片大小設定
maxsize引數如果調的比blocksize小,則會讓切片變小,而且就等於配置的引數值
minsize引數調的比blocksize大,則可以讓切片變的比blocksize大
(3)獲取切片資訊api
獲取切片的檔名稱:
inputsplit.getpath().getname()
根據檔案型別獲取切片資訊
框架預設的textinputformat切片機制是對任務按檔案規劃切片,不管檔案多小
,都會是乙個單獨的切片,都會交給乙個maptask,這樣如果有大量小檔案,就會產生大量的
maptask,處理效率極其低下。
combinetextinputformat用於小檔案過多的場景,它可以將多個小檔案從邏輯上規劃到乙個切片中,這樣,多個小檔案就可以交給乙個maptask處理。
(1)虛擬儲存切片最大值設定
combinefileinputformat.setmaxinputsplitsize(job,4194304);//虛擬儲存切片最大值設定:4m注意:為了測試方便,設定為4m,虛擬儲存切片最大值設定最好根據實際的小檔案大小情況來設定具體的值。
(2)切片機制
生成切片過程包括:虛擬儲存過程和切片過程二部分。
i)虛擬儲存過程
將輸入目錄下所有檔案大小,依次和設定的setmaxinputsplitsize值比較,如果不大於設定的最大值,邏輯上劃分乙個塊。如果輸入檔案大於設定的最大值且大於兩倍,那麼以最大值切割一塊;當剩餘資料大小超過設定的最大值且不大於最大值
2倍,此時將檔案均分成
2個虛擬儲存塊(防止出現太小切片)。
例如setmaxinputsplitsize值為4m,輸入檔案大小為8.02m,則先邏輯上分成乙個4m。剩餘的大小為4.02m,如果按照4m邏輯劃分,就會出現0.02m的小的虛擬儲存檔案,所以將剩餘的4.02m檔案切分成(2.01m和2.01m)兩個檔案。
ii)切片過程
(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
(3)在driver**裡引入combinetextinputformat
// 如果不設定inputformat,它預設用的是textinputformat.classjob.setinputformatclass(combinetextinputformat.class);
//虛擬儲存切片最大值設定4m
combinetextinputformat.setmaxinputsplitsize(job, 4194304);
Hadoop資料切片基本原理
資料切片問題 先給不懂得同學解釋一下概念 資料塊block 是hdfs物理資料塊,乙個大檔案丟到hdfs上,會被hdfs切分成指定大小的資料塊,即block 資料切片 資料切片是邏輯概念,只是程式在輸入資料的時候對資料進行標記,不會實際切分磁碟資料 切片1 假設檔案大小為300m,切片大小為100m...
hadoop筆記之切片大小控制
hdfs的block是邏輯上的資料塊.hadoop2.0中每一塊預設大小128mb,實際儲存過程中block大小小於等128mb,它是以檔案為儲存物件.如一200mb大小檔案,分兩個資料塊128mb 72mb 這裡的兩個塊大實際小分別是128mb和72mb 演算法分析 max minsize,min...
hadoop大資料與hadoop雲計算
hadoop入門課程 hadoop大資料與hadoop雲計算,hadoop最擅長的事情就是可以高效地處理海量規模的資料,這樣hadoop就和大資料及雲計算結下了不解之緣。本節將先介紹與大資料相關的內容,然後講解hadoop 大資料以及雲計算之間的關係,使讀者從大資料和雲計算的角度來認識hadoop。...