MapReduce過程知識點總結

2021-10-09 12:27:16 字數 1441 閱讀 2641

maptask 工作過程

由程式內的inputformat來讀取外部的資料,呼叫recordreader的read方法來讀取並,返回(k,v)鍵值對

讀取的(k,v)鍵值對,傳送給map()方法,作為其傳入引數來執行使用者自定義的map邏輯。

context.write方法被呼叫時,outputcollector元件會將map()方法的輸出結果寫入到環形緩衝區

環形緩衝區就是乙個環形陣列,後端不斷接收資料的同時,前端不斷的溢位資料,長度用完後讀取的新資料再從前端開始覆蓋。這個緩衝區的預設size=100m,可以通過mr.sort.mb配置

spiller元件會從環形緩衝區溢位檔案,這個過程會按照定義的partitioner分割槽(預設的是hashpartition),並且按照key.compareto進行排序,如果有combiner也會執行combiner。spiller的不斷工作,會溢位形成很多小檔案(預設達到設定的80%時),會在本地建立溢位檔案

小檔案執行merge(合併),形成分割槽且區內排序

reduce會根據自己的分割槽,去所有map task中讀取相對應的資料

reduce task工作過程

reduce會從個個maptask上遠端複製一片資料,並針對某一片資料,如果大小超過一定的閾值,則會寫到磁碟上,否則直接放到記憶體中。

通過groupingcomparator()分辨同一組的資料,把他們傳送給reduce(k, iterator)方法(多個資料合成一組時,只取其中第乙個key)

呼叫context.write方法,會讓outputformat呼叫recordwriter的write()方法將處理結果寫入到資料倉儲,每乙個maptask對應乙個分割槽檔案。

mapreduce工作過程中,map階段處理的的資料如何傳遞給reduce階段,shuffle會將maptask輸出的處理結果資料分發給reducetask,並在分發的過程中,對資料按照key進行分割槽和排序。

小檔案處理的弊端:

解決方法

資料傳輸的io問題:

每乙個map可能會有多個spill檔案需要寫入磁碟,產生較多的磁碟io

資料量很小,但是map和reduce任務很多時,產生較多得到網路io

map端溢位spill檔案後,進行分割槽排序後,會執行combiner函式。

多個spill檔案合併成乙個大檔案時,會使用

在reduce任務端,複製map輸出,在合併後溢位到磁碟時,也會執行combiner函式

自定義分割槽函式,讓key值較為均勻的分布在reduce上

對map端進行壓縮處理

使用combiner函式

有四個階段可以進行效能調優:

hashMap hashtable知識點總結

a hashmap實際上是乙個 鍊錶雜湊 的資料結構,即陣列和鍊錶的結合體。hashmap的底層結構是乙個陣列,陣列中的每一項是一條鍊錶。b hashmap的例項有倆個引數影響其效能 初始容量 和 裝填因子。c hashmap實現不同步,執行緒不安全。hashtable執行緒安全 d hashmap...

Se Map Proxy Symbol知識點總結

se map proxy symbol總結 是es6中新增的乙個資料結構。可以理解為乙個內容不可重複的陣列 初始化 常用方法和屬性 add item 用於向set物件內新增一項 item 被新增的項 注 如果新增的是已經存在的內容 則新增失敗 var set new set 0,1,2,3,set....

Robotframework變數知識點總結

目錄 scarlar變數 變數使用 list變數 變數使用 list 元素的使用 變數轉換 其他變數 變數檔案 一,變數與常量 變數都用表示。變數主要有兩類 scalar類和list類。scalar 類表示為 list類表示為 rf的底層語法是python,所以不需要特別宣告變數,只需要進行初始化賦...