大資料MapReduce總結

2021-08-29 04:05:24 字數 3619 閱讀 9176

mapreduce定義:

hadoop mapreduce是乙個軟體框架,基於該框架能夠容易地編寫應用程式,這些應用程式能夠執行在由上千個商用機器組成的大集群上,並以一種可靠的,具有容錯能力的方式並行地處理上tb級別的海量資料集。

mapreduce主要思想:分久必合

mapreduce兩個階段:map端、reduce端

mapreduce核心思想:「相同」的key為一組,呼叫一次reduce方法,方法內迭代這一組資料進行計算。

mapreduce 具體分為四步:

1.map 階段;

2.shuffle write階段

3.shuffle read階段

4.reduce 階段

mapreduce中的幾個名詞:

map task – map端開啟的處理執行緒, 乙個map task 處理乙個split.

split – 切片的概念, 假設資料存放在hdfs上, mr在計算前, 會將hdfs上的檔案劃分切片. split的預設大小與乙個block的大小一致, 即block數 = split數 = map task數.

也可設定split與block之間的大小關係, 例如, 2block = split = map task; 1/2block = split = map task.也可設定split與block之間的大小關係, 例如, 2block = split = map task; 1/2block = split = map task.

key-value : mr處理過程中, 資料都是通過鍵值對的形式傳遞的. 起初key值為blockid的偏移量(long型別), value為block中的資料(string型別). 經過map, reduce處理過後, key-value內容根據需求而定.

map – 對資料切分的方法, 輸入型別為, 輸出型別由需求決定.

hashpartitioner – 預設分割槽器. 相同的分割槽由相同的reduce task處理, 分割槽策略: 經map處理後, 將key的hash值與reduce task的個數(num)取模, 模值相同的key將放在同乙個分割槽中.

buffer in memory – 記憶體緩衝區, map對split內容處理後先寫入記憶體緩衝區, 進入緩衝區的每一條記錄都由三部分組成: 分割槽號, key, value. buffer大小預設100m, 分為兩份, 乙份80m, 乙份20m.

當達到溢寫比例(buffer中約有80m資料)時, 會將這80m資料封鎖, 然後對資料進行聚合, 排序, 排序時先按照分割槽排序, 分割槽相同的再按照key排序. 排序完成後就將資料溢寫到磁碟上. 每次溢寫產生乙個磁碟小檔案.

聚合排序過程中, 如果還有內容繼續往buffer中寫的話, 這些內容將被寫入buffer剩餘的20m中.

merge – map階段的merge基於磁碟小檔案進行合併, 合併時按照分割槽號進行合併, 將相同分割槽號的資料放在同乙個大分割槽中. 合併完成後會對相同分割槽的資料進行排序.

– reduce階段的merge合併時會對每乙個有序的磁碟小檔案進行排序, 這些小檔案已經屬於同乙個分割槽. 最後合併成乙個磁碟大檔案時, 會根據key值進行分組, key值相同的為一組.

fetch – reduce task程序從map task產生的磁碟大檔案中拉去資料, 拉取的資料先放入reduce端的記憶體中, 記憶體大小預設為1g的70%. 記憶體中資料達到一定的溢寫比例後, 就會將記憶體中的資料溢寫到磁碟小檔案中, 溢寫之前也會進行排序.

reduce – 對有序的大檔案中key值相同的一組資料處理的方法, 輸入引數由map端的輸出引數決定, 輸出引數由需求決定, 都是key-value的形式.

reduce task – reduce端開啟的處理執行緒, 乙個reduce task產生乙個output檔案 .

mapreduce執行流程:

假設mr處理的資料儲存在hdfs上, hdfs上的資料是以block的形式存放.

1.1 map階段

1.1.1 map task從hdfs中讀取檔案, hdfs中檔案以block塊的形式存在, 預設情況下乙個block塊大小與乙個split大小相同, 乙個map task 處理乙個split. 整個過程資料以鍵值對的形式傳輸, 輸入map前的key為blockid的偏移量, value為block塊中的內容.

1.1.2 map方法根據需求將傳入的value進行切割 (傳入map方法的value為什麼是一行的資料而不再是整個文字內容? 是傳入前將block檔案切分還是在呼叫map方法時將檔案按行切分的? ), 再根據需求設定輸出型別的key和value.

1.2 shuffle write階段

1.2.1 分割槽器分割槽(打標籤), 分割槽的目的就是讓同乙個分割槽的資料被同乙個reduce task 來處理. 預設的分割槽器是hashpartitioner, 它的分割槽策略為將經map處理後得到的key的hash值與reduce task的個數(num)取模, 模值相同的key將放在同乙個分割槽中.

1.2.2 向記憶體buffer中寫資料, 將打上標籤的map輸出的資料寫入到記憶體buffer中, 記憶體buffer預設大小為100m. 此時每乙個資料記錄都由三部分組成:(1)分割槽號;(2)key;(3)value;

1.2.3 當記憶體buffer中寫入的資料達到80m時, 此時會將這80m的記憶體封鎖, 封鎖後對記憶體中的資料進行聚合(combiner), combiner完成後再根據分割槽號排序, 分割槽號排序完之後再按照key的大小排序(sort). 此時這80m的資料中相同分割槽號的資料存放在一起, 並且分區內的資料是有序的.

1.2.4 溢寫(spill), 記憶體buffer達到80m記憶體時, 排序完成後對這80m資料溢寫. 將資料寫入磁碟, 形成乙個磁碟小檔案, 檔案根據分割槽號劃分並且內部有序. 每次記憶體buffer溢寫都會產生這麼乙個小檔案.

1.2.5 合併(merge), 所有溢寫完畢後, 會將磁碟小檔案合併成乙個大檔案, 合併時先對資料進行聚合(combiner), 然後再使用歸併演算法將各個小檔案合併成乙個根據分割槽號劃分且內部有序的大檔案. 每乙個map task都會產生這麼乙個大檔案.

2.1 shuffle read階段

1.1.1 讀取map產生的大檔案中對應分割槽的資料. 將分割槽資料寫入記憶體中, 記憶體大小預設為1g, 當記憶體中寫入的資料達到溢寫比例時, 記憶體的溢寫過程與map中buffer溢寫幾乎一樣, 首先封鎖資料, 然後對資料排序, 排序完成後將排好序的資料寫入磁碟小檔案中.

1.1.2 當map中對應分割槽的資料全部讀取之後. reduce task會對所有的磁碟小檔案進行歸併演算法合併, 合併成乙個內部有序的磁碟大檔案. 大檔案中相同key值的資料為同一組資料.

2.2 reduce階段

1.2.1 遍歷整個大檔案, 對同一組的資料呼叫一次reduce方法, 將輸出的結果寫入output檔案中. 每個reduce task產生乙個輸出檔案, 輸出檔案不再合併.

優點

缺點

大資料之Map reduce

大資料問題一般解決方式 利用雜湊函式進行分流來解決記憶體限制或者其他限制的問題。1.雜湊函式又叫雜湊函式,雜湊函式的輸入域可以是非常大的範圍,但是輸出域是固定範圍。假設為s。雜湊函式的性質 1.典型的雜湊函式都擁有無限的輸入值域。2.輸入值相同時 返回值一樣。3.輸入值不同時,返回值可能一樣,也可能...

大資料 MapReduce概述

mapreduce 核心思想 總結mapreduce是乙個分布式執行程式的程式設計框架,是使用者開發 基於hadoop的資料分析應用的核心框架。mapreduce核心功能是把使用者編寫的業務邏輯 和自帶預設元件整合成乙個完整的分布式執行程式,併發執行在乙個hadoop集群上。下面分析官方wordco...

大資料原理筆記 MapReduce

解決能夠滿足 分而治之 處理要求的場景。處理結果之間不能相互依賴。map任務之間是不能通訊的,reduce之間也不會發生資訊交換。處理過程 inputformat,負責資料的輸入,驗證資料格式及檔案切分 split 通過rr record reader 過程,根據切片後檔案的位置資訊,從hdfs中將...