MapReduce是一種編程模型,用于大規模數據集(大于1TB)的并行運算。MapReduce采用”分而治之”的思想,把對大規模數據集的操作,分發給一個主節點管理下的各個分節點共同完成,然后通過整合各個節點的中間結果,得到最終結果。簡單地說,MapReduce就是”任務的分解與結果的匯總”。
MapReduce架構
先來看一下MapReduce1.0的架構圖
上圖中的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查詢狀態時,它將得知任務已完成,便顯示一條消息給用戶。
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{@Overrideprotectedvoidmap(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{@Overrideprotectedvoidreduce(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這些并行計算大都是基于非循環的數據流模型,也就是說,一次計算過程中,不同計算節點之間保持高度并行,這樣的數據流模型使得那些需要反復使用一個特定數據集的迭代算法無法高效地運行。
“MapReduce的運行原理”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注本站網站,小編將為大家輸出更多高質量的實用文章!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
以租代購是什么意思?以租代購,顧名思義,是指以租借的形式,來替代采購。以租代購是一種通過租賃來達到財務目標的商業模式。租車購車是一種以商品交易為形式的汽車消費金融業務。它是一種以客戶常租車輛及二手車車輛處置為一體的打包業務為手段,實現客戶分期買車目的的一種汽車消費形式。汽車采用長期租賃模式,每月按月繳納一次租金,租期滿時,汽車產權轉移到顧客名下。以租代購無力償還怎么辦?如果是不能一次還清的話,可以...
在實際的經濟生活中,中央銀行的三大法寶一般認為是存款準備金政策、公開市場業務政策以及再貼現政策。利用以上這三三大法寶,中央銀行需要對市場金融秩序進行宏觀調控,實現對市場內信用總量進行統一的收縮或者擴張操作。央銀三大法寶的詳情介紹1、存款準備金政策:中央銀行通過對存款準備金率進行調控,從而影響金融機構的實際影響能力,間接的來調控市場內貨幣的供應總量;2、公開市場業務政策:公開市場業務政策即意味著中央...
3月21日,本月LPR報價出爐!2022年3月21日貸款市場報價利率(LPR)為:1年期LPR為3.7%,5年期以上LPR為4.6%,均維持前值不變。2022 年2 月21 日貸款市場報價利率(LPR)為:1 年期LPR 為3.70%,此前為3.70%,5 年期以上LPR 為4.60%,此前為4.60%。此前,2021 年12 月和2022 年1 月,1 年期LPR 連續兩個月下降,分別下降了5 ...