hadoop 10 MapTask及輸入切片機制

2021-10-06 14:04:06 字數 1665 閱讀 1721

//原始碼

//切片大小決定公式

protected

long

computesplitsize

(long blocksize,

long minsize,

long maxsize)

//預設最小值為1

public

static

long

getminsplitsize

(jobcontext job)

//預設最大值為long的最大值

public

static

long

getmaxsplitsize

(jobcontext context)

由上述公式可知,更改maxsizeminsize可以更改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...