Hadoop MR 資料切片與輸入格式化

2021-10-04 18:27:46 字數 2761 閱讀 3328

預設切片等於 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大致說明了我們計算的任務流程,不過並沒有深入內部講述 的一些細節。所有細節也非常繁細,我整理出一幅大致的資料...