預設切片等於 block 大小, 當單個節點儲存資料等於 block 時(源資料》=block, 分片儲存在單個或多個節點), 乙個節點會對乙個檔案生成乙個 maptask 執行資料操作,並且不會有資料傳輸的消耗
假設切片為 100m, 小於 block, 那麼當單個節點儲存資料等於 block 時(源資料》=block, 分片儲存在單個或多個節點), maptask 會在不同的datanode 節點讀取資料, 造成資料傳輸過程中的效能損耗
mapreduce 的切片過程是在 fileinputformat 中實現的, fileinputformat官方提供了多個實現類* *
fixlengthinputformat
使用者從檔案中讀取固定寬度的二進位制記錄, 預設這些資料沒有用分隔符分開,通過設定fixlengthinputformat.fixed_record_length
設定每個記錄的大小
combinetextinputformat
大量小檔案情況下, 會對每乙個小檔案劃為乙個切片,導致每個小檔案乙個 maptask, 造成 mapreduce 效能及其低下, 通過 combinetextinputformat 可以將多個小檔案劃分到乙個切片, 提高 mapreduce 單次處理的檔案資料量, 減少 mapreduce 啟動停止的開銷
combinetextinputformat.
setmaxinputsplitsize
(job,
102400000);
// 100m
file1.txt 20m 20m (20+50+60)m
file2.txt 50m 50m
file2.txt 120m 60m
60m (60+70)m
file2.txt 70m 70m
file2.txt 70m 50m (50+60)m
file2.txt 120m 60m
60m (60+80)m
file2.txt 80m 80m
輸入源目錄下有多個檔案讀取檔案大小
判斷檔案大小是否大於分片大小, 如果大於, 將檔案劃分為以filesize/(filesize/splitsize+(filesize%splitsize>0?1:0))大小相等的多個分片 例如 120>100 劃分為兩個 60
將劃分後的分片組合, 判斷第乙個分片是否大於 splitsize, 不大於, 直接+上後乙個分片的大小,此時如果大於 splitsize, 則劃分為乙個分片, 下面再劃分新的分片,
上面最開始的 7 個檔案最終劃分為四個分片 130m 130m 110m 140m
dbinputformat 使用 jdbc 讀取關係型資料庫內的資料
繼承 fileinputformat抽象類(讀文字檔案, ), 必須實現乙個必須實現的createrecordreader方法, 建立recordreader
也可以繼承其它類實現不同的資料讀取: compositeinputformat, dbinputformat, composableinputformat等
可以選擇重寫 fileinputformat 其它方法, 包括是否分片, 和如何分片邏輯
自定義recordreader, 內部為讀取每一組 key- value 的邏輯
/**
** *
* * @author zcz
* @date 2020-04-04 19:49
*/public
class
customerinputformat
extends
fileinputformat
}
/**
** *
* * @author zcz
* @date 2020-04-04 19:53
*/public
class
customerrecordreader
extends
recordreader
@override
public
boolean
nextkeyvalue()
throws ioexception, interruptedexception
@override
public object getcurrentkey()
throws ioexception, interruptedexception
@override
public object getcurrentvalue()
throws ioexception, interruptedexception
@override
public
float
getprogress()
throws ioexception, interruptedexception
@override
public
void
close()
throws ioexception
}
golang nil切片與空切片
var slice int 建立出來的 slice 其實是乙個 nil slice。它的長度和容量都為0。和nil比較的結果為true。這裡比較混淆的是empty slice,empty slice的長度和容量也都為0,但是所有的空切片的資料指標都指向同乙個位址 0xc42003bda0。空切片和 ...
Hadoop資料切片與MapTask並行度決定機制
資料塊 block 是hdfs 物理上把資料分成一塊一塊。資料切片 資料切片只是在邏輯上對輸入進行分片,並不會在磁碟上將其切分成片進行儲存。假設切片大小設定成100m 1 乙個job的map階段並行度由客戶端在提交job時的切片數決定 2 每乙個split切片分配乙個maptask並行例項處理 3 ...
hadoop mr的資料流程互動簡單描述
一 概述 二 計算流程 mr計算框架發展到1.0.3左右,計算框架沒有發展大的變化。在 hadoop the definitive guide 中有張經典的圖可以說明問題,如圖1所示。圖1圖1大致說明了我們計算的任務流程,不過並沒有深入內部講述 的一些細節。所有細節也非常繁細,我整理出一幅大致的資料...