//原始碼
//切片大小決定公式
protected
long
computesplitsize
(long blocksize,
long minsize,
long maxsize)
//預設最小值為1
public
static
long
getminsplitsize
(jobcontext job)
//預設最大值為long的最大值
public
static
long
getmaxsplitsize
(jobcontext context)
由上述公式可知,更改maxsize
和minsize
可以更改split
大小。
//設定我們的輸入型別為combinetextinputformat
job.
setinputformatclass
(combinetextinputformat.
class);
//虛擬儲存切片最大值設定4m 設定每個切片處理資料量為4m。單位long
combinetextinputformat.
setmaxinputsplitsize
(job,
4194304
);
框架預設的textinputformat
切片機制是對任務按檔案規劃切片,不管檔案多小,都會是乙個單獨的切片,都會交給乙個maptask
,這樣如果有大量小檔案,就會產生大量的maptask
,處理效率極其低下。
combinetextinputformat
用於小檔案過多的場景,它可以將多個小檔案從邏輯上規劃到乙個切片中,這樣,多個小檔案就可以交給乙個maptask處理。(更好的選擇是不要讓hdfs上出現大量的小檔案)
combinetextinputformat.
setmaxinputsplitsize
(job,
4194304);
// 4m
將輸入目錄下所有檔案大小,依次和設定的setmaxinputsplitsize
值比較,
例如setmaxinputsplitsize
值為4m
,輸入檔案大小為8.02m
.
判斷虛擬儲存的檔案大小是否大於setmaxinputsplitsize值,大於等於則單獨形成乙個切片。
如果不大於則跟下乙個虛擬儲存檔案進行合併,共同形成乙個切片。
測試舉例:有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
Hadoop深入學習 Map Task詳解
在本節中,我們主要來學習maptask的內部實現。整體執行流程 如上圖示,maptask的整個處理流程分五個階段 read階段 通過recordreader從inputsplit分片中將資料解析成乙個個key value。map階段 將由recordreader解析出的key value交給map ...
Hadoop資料切片與MapTask並行度決定機制
資料塊 block 是hdfs 物理上把資料分成一塊一塊。資料切片 資料切片只是在邏輯上對輸入進行分片,並不會在磁碟上將其切分成片進行儲存。假設切片大小設定成100m 1 乙個job的map階段並行度由客戶端在提交job時的切片數決定 2 每乙個split切片分配乙個maptask並行例項處理 3 ...
Hadoop1 0與Hadoop2 0的區別
hadoop1.0即第一代hadoop,指的是版本為apache hadoop 0.20.x 1.x或者cdh3系列的hadoop,核心主要由hdfs和mapreduce兩個系統組成,其中mapreduce是乙個離線處理框架,由程式設計模型 新舊api 執行時環境 jobtracker和tasktr...