大資料學習開發技術:MapReduce執行原理
MapReduce是一種程式設計模型,用於大規模資料集(大於1TB)的並行運算。MapReduce採用”分而治之”的思想,把對大規模
資料集的操作,分發給一個主節點管理下的各個分節點共同完成,然後透過整合各個節點的中間結果,得到最終結果。簡單地
說,MapReduce就是“任務的分解與結果的彙總”。
上圖中的TaskTracker對應HDFS中的DataNode,
在MapReduce1.x中,用於執行MapReduce任務的機器角色有兩個:一個是JobTracker;另一個是TaskTracker,JobTracker是用於排程工作的,TaskTracker是用於執行工作的。一個Hadoop叢集中只有一臺JobTracker。
流程分析
-
在客戶端啟動任務,客戶端向JobTracker請求一個Job ID。
-
將執行任務所需要的程式檔案複製到HDFS上,包括MapReduce程式打包的JAR檔案、配置檔案和客戶端計算所得的輸入劃分資訊。這些檔案都存放在JobTracker專門為該任務建立的資料夾中。資料夾名Job ID。
-
JobTracker接收到任務後,將其放在一個佇列裡,等待排程器對其進行排程,當作業排程器根據自己的排程演算法排程到該任務時,會根據輸入劃分資訊建立N個map任務,並將map任務分配給N個TaskTracker(DataNode)執行。
-
map任務不是隨隨便便地分配給某個TaskTracker的,這裡有個概念叫:資料本地化(Data-Local)。意思是:將map任務分配給含有該map處理的資料塊的TaskTracker上,同時將程式JAR包複製到該TaskTracker上來執行,這叫“運算移動,資料不移動”。而分配reduce任務時並不考慮資料本地化。
-
TaskTracker每隔一段時間會給JobTracker傳送一個Heartbeat(心跳),告訴JobTracker它依然在執行,同時心跳中還攜帶著很多的資訊,比如當前map任務完成的進度等資訊。當JobTracker收到作業的最後一個任務完成資訊時,便把該作業設定成“成功”。當JobClient查詢狀態時,它將得知任務已完成,便顯示一條訊息給使用者。
在這裡還是要推薦下我自己建的大資料學習交流群:199427210,群裡都是學大資料開發的,如果你正在學習大資料 ,小編歡迎你加入,大家都是軟體開發黨,不定期分享乾貨(只有大資料軟體開發相關的),包括我自己整理的一份2018最新的大資料進階資料和高階開發教程,歡迎進階中和進想深入大資料的小夥伴加入。
以上是在客戶端、JobTracker、TaskTracker的層次來分析MapReduce的工作原理的,下面我們再細緻一點,從map任務和reduce任務的層次來分析分析吧。
MapReduce執行流程
以wordcount為例,執行的詳細流程圖如下
1.split階段
首先mapreduce會根據要執行的大檔案來進行split,每個輸入分片(input split)針對一個map任務,輸入分片(input split)儲存的並非資料本身,而是一個分片長度和一個記錄資料位置的陣列。輸入分片(input split)往往和HDFS的block(塊)關係很密切,假如我們設定HDFS的塊的大小是64MB,我們執行的大檔案是64x10M,mapreduce會分為10個map任務,每個map任務都存在於它所要計算的block(塊)的DataNode上。
2.map階段
map階段就是程式設計師編寫的map函式了,因此map函式效率相對好控制,而且一般map操作都是本地化操作也就是在資料儲存節點上進行。本例的map函式如下:
-
publicclassWCMapperextendsMapperLongWritable,Text,Text,IntWritable{@Override
-
protectedvoidmap(LongWritablekey,Textvalue,Contextcontext)throwsIOException,InterruptedException{
-
Stringstr=value.toString();
-
String[]strs=StringUtils.split(str,''); for (Strings:strs){
-
context.write(newText(s),newIntWritable(1));
-
}
-
}
-
}
根據空格切分單詞,計數為1,生成key為單詞,value為出現1次的map供後續計算。
3.shuffle階段
shuffle階段主要負責將map端生成的資料傳遞給reduce端,因此shuffle分為在map端的過程和在reduce端的執行過程。
先看map端:
-
map首先進行資料結果資料屬於哪個partition的判斷,其中一個partition對應一個reduce,一般透過key.hash()%reduce個數來實現。
-
把map資料寫入到Memory Buffer(記憶體緩衝區),到達80%閥值,開啟溢寫進磁碟過程,同時進行key排序,如果有combiner步驟,則會對相同的key做歸併處理,最終多個溢寫檔案合併為一個檔案。
reduce端:
reduce節點從各個map節點拉取存在磁碟上的資料放到Memory Buffer(記憶體緩衝區),同理將各個map的資料進行合併並存到磁碟,最終磁碟的資料和緩衝區剩下的20%合併傳給reduce階段。
4.reduce階段
reduce對shuffle階段傳來的資料進行最後的整理合併
-
publicclassWCReducerextendsReducerText,IntWritable,Text,IntWritable{@Override
-
protectedvoidreduce(Textkey,IterableIntWritablevalues,Contextcontext)throwsIOException,InterruptedException{intsum=0; for (IntWritablei: values ){
-
sum+=i.get();
-
}
-
context.write( key ,newIntWritable(sum));
-
}
-
}
MapReduce的優缺點
優點:
-
易於程式設計;
-
良好的擴充套件性;
-
高容錯性;
4.適合PB級別以上的大資料的分散式離線批處理。
缺點:
-
難以實時計算(MapReduce處理的是儲存在本地磁碟上的離線資料)
-
不能流式計算(MapReduce設計處理的資料來源是靜態的)
-
難以DAG計算MapReduce這些平行計算大都是基於非迴圈的資料流模型,也就是說,一次計算過程中,不同計算節點之間保持高度並行,這樣的資料流模型使得那些需要反覆使用一個特定資料集的迭代演算法無法高效地執行。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31561003/viewspace-2220128/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 大資料開發技術學習方向大資料
- 大資料學習筆記(十七)-MapReduce大資料筆記
- 【大資料】MapReduce開發小實戰大資料
- 大資料學習路線圖 讓你精準掌握大資料技術學習大資料
- 大資料技術原理與應用——大資料概述大資料
- 學習大資料需要掌握的知識,需要學習的資料技術大資料
- 大資料技術原理與應用大資料
- 大資料入門:MapReduce基本原理大資料
- 大資料工程師需要學習哪些技術?大資料工程師
- 大資料要學習哪些技術呢?大資料技術的分類與選擇路線大資料
- 學大資料需要掌握的知識,需要學習的資料技術大資料
- 現代Web開發需要學習的15大技術Web
- 大資料技術的原理是什麼大資料
- 大資料——Flink核心技術及原理大資料
- Hadoop大資料開發框架學習Hadoop大資料框架
- 小白如何學習大資料開發,大資料學習路線是怎樣的?大資料
- 學會Java開發才能學習大資料嗎?Java大資料
- 10個最熱門的大資料技術,附上大資料學習路線大資料
- 大資料培訓學習後,我們可以掌握哪些大資料技術呢?大資料
- 好程式設計師大資料學習路線分享MAPREDUCE程式設計師大資料
- SSM三大框架的執行流程、原理、核心技術詳解SSM框架
- 科學甩鍋技術: Typescript 執行時資料校驗TypeScript
- 大資料 - MapReduce:從原理到實戰的全面指南大資料
- 大資料系列 1:大資料技術發展歷程大資料
- java大資料最全課程學習筆記(5)--MapReduce精通(一)Java大資料筆記
- 好程式設計師大資料學習路線之mapreduce概述程式設計師大資料
- 好程式設計師大資料培訓教你快速學習MapReduce程式設計師大資料
- 開源大資料技術線上Meetup大資料
- 前端開發技術-剖析JavaScript單執行緒前端JavaScript執行緒
- 深入學習執行緒池原理執行緒
- 好程式設計師大資料學習路線分享大資料之執行緒程式設計師大資料執行緒
- 大資料學習:怎樣進行大資料的入門級學習?大資料
- 學習大資料必須瞭解的大資料開發課程大綱大資料
- BlueDoge大藍狗空投系統技術開發原理
- 大資料入門學習之Hadoop技術優缺點大資料Hadoop
- 大資料技術學習路線,有信心能堅持學習的朋友,從現在開始吧大資料
- 學習ASM技術(八)--ASM操作原理ASM
- 大資料怎麼學?對大資料開發領域及崗位的詳細解讀,完整理解大資料開發領域技術體系大資料