每個map上建立乙個split資料,預設和block大小相同,每乙個split都會由乙個map task進行處理,從block中讀取出每一行的資料會變成乙個個的鍵值對。
接下來,讀取出來的資料都會進入記憶體緩衝區,在進入緩衝區之前,每一條資料都會被打上標籤,這個過程叫做分割槽,由分割槽器來完成,預設的分割槽器是hashpartitioner,然後資料就會被讀取到緩衝區,緩衝區會將這些資料先進行combiner,然後進行排序,排序規則是先根據分割槽號來排序,然後根據key來排序,緩衝區大小為100m,分為兩個部分,分別是80m和20m,之所以這樣劃分是為了在記憶體中讀滿資料的時候,80m的資料會溢寫到磁碟中形成乙個個小檔案,在這個時候,由剩下的20m記憶體進行讀資料,提高計算效率。
接下來,磁碟中乙個個排好序的小檔案會被合併成乙個大檔案,過程中會使用歸併排序將屬於同一分割槽的資料合併大大檔案中的同一分割槽,在排序的過程中還會進行一次combiner。
當所有的map task完成後,每乙個map task都會形成乙個最終檔案,並且該檔案按區進行劃分。在reduce中,就會拉取各個map中的屬於同一分割槽的資料到相應的reduce task,當記憶體滿了就會進行溢寫,在溢寫前會進行排序,當把這個分割槽的資料全部拉取過來之後,磁碟中乙個個的小檔案會進行合併,合併的過程中也會根據key進行排序。排完序之後,會把合併後的大檔案進行分組,相同的key為一組,每一組資料呼叫一次reduce。第一組呼叫reduce形成乙個結果檔案,其他組形成的結果也會追加到這個結果檔案中,也就是說,乙個分割槽的資料只會形成乙個結果檔案。
hadoop1.x版本:
角色:弊端:
hadoop2.x版本 yarn:
角色:nodemanager
1.向resourcemanager匯報資源
2.管理container生命週期
container
存在於nodemanager節點,具體任務task的計算單元
預設nodemanager啟動執行緒監控container大小,超出申請資源額度,kill
client
請求資源建立am
與am進行互動
工作流程:
總結:
MapReduce執行原理
mapreduce是一種程式設計模型,用於大規模資料集 大於1tb 的並行運算。mapreduce採用 分而治之 的思想,把對大規模資料集的操作,分發給乙個主節點管理下的各個分節點共同完成,然後通過整合各個節點的中間結果,得到最終結果。簡單地說,mapreduce就是 任務的分解與結果的彙總 map...
MapReduce的原理及執行過程
hadoop mapreduce是乙個軟體框架,基於該框架能夠容易地編寫應用程式,這些應用程式能夠執行在由上千個商用機器組成的大集群上,並以一種可靠的,具有容錯能力的方式並行地處理上tb級別的海量資料集。mapreduce是一種分布式計算模型,是google提出的,主要用於搜尋領域,解決海量資料的計...
MapReduce通俗語言講述執行原理
先假設乙個待解決的問題 如何把乙份300m的檔案,統計到每個單詞的詞頻輸出出來?首先,將這個任務分解為以下幾個大的步驟 把檔案寫進datanode 將計算框架分發到各個datanode,讀取檔案內容並進行計算,這個過程就是mapreduce的過程 將計算完的結果寫進磁碟 從客戶端寫入檔案,涉及到的步...