日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop阅读笔记(四)——一幅图看透MapReduce机制

發(fā)布時(shí)間:2024/1/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop阅读笔记(四)——一幅图看透MapReduce机制 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  時(shí)至今日,已然看到第十章,似乎越是焦躁什么時(shí)候能翻完這本圣經(jīng)的時(shí)候也讓自己變得更加浮躁,想想后面還有一半的行程沒(méi)走,我覺(jué)得這樣“有口無(wú)心”的學(xué)習(xí)方式是不奏效的,或者是收效甚微的。如果有幸能有大牛路過(guò),請(qǐng)指教如何能以效率較高的方式學(xué)習(xí)Hadoop。

  我已經(jīng)記不清圣經(jīng)《hadoop 實(shí)戰(zhàn)2》在我手中停留了多久,但是每一頁(yè)每一章的翻過(guò)去,還是在腦殼里留下了點(diǎn)什么。

  一段時(shí)間以來(lái),我還是通過(guò)這本書(shū)加深以及糾正了我對(duì)于MapReduce、HDFS乃至Hadoop的新的認(rèn)識(shí)。本篇主要介紹MapReduce作業(yè)的工作機(jī)制,并介紹介于Map和Reduce過(guò)程中的Shuffle和排序過(guò)程。

  為響應(yīng)標(biāo)題,我們今天談的MapReduce機(jī)制,切入點(diǎn)是一張圖。先上圖:

  

  從圖中不難看出,整個(gè)MapReduce分為以下流程:代碼編寫(xiě)->作業(yè)配置->作業(yè)提交->Map任務(wù)的分配和執(zhí)行->處理中間結(jié)果->Reduce任務(wù)的分配和執(zhí)行->作業(yè)完成

  圖中:

  1.運(yùn)行作業(yè)

  2.獲取作業(yè)ID

  3.復(fù)制作業(yè)資源

  4.提交作業(yè)

  5.初始化作業(yè)

  6.獲取輸入分割

  7.心跳通信

  8.獲取作業(yè)資源

  9.發(fā)布

  10.運(yùn)行

  以上過(guò)程主要涉及到的實(shí)體有客戶(hù)端(用于MR代碼的編寫(xiě),配置作業(yè),提交作業(yè));TaskTracker(保持與JobTracker通信,在分配的數(shù)據(jù)片段上執(zhí)行Map或Reduce任務(wù));HDFS(保存作業(yè)的數(shù)據(jù)、配置信息、作業(yè)結(jié)果等);JobTracker(初始化作業(yè),分配作業(yè),與TaskTracker通信,協(xié)調(diào)整個(gè)作業(yè)的執(zhí)行)

?

  提交作業(yè)

  在提交作業(yè)前,我們需要對(duì)作業(yè)進(jìn)行配置,主要包括:

  (1)程序代碼

  (2)Map和Reduce接口

  (3)輸入輸出路徑

  (4)其他配置,如InputFormat、OutputFormat等

?

  提交作業(yè)的過(guò)程可以分為以下幾步:

  (1)調(diào)用JobTracker對(duì)象的getNewJobId()方法從JobTracker處獲取當(dāng)前作業(yè)的ID(見(jiàn)途中步驟2)

  (2)檢查作業(yè)相關(guān)路徑,在運(yùn)行代碼時(shí),經(jīng)常遇到報(bào)錯(cuò)提示輸出目錄已存在,所以在運(yùn)行代碼前要確保輸出目錄不存在

  (3)計(jì)算作業(yè)的輸入劃分

  (4)將運(yùn)行所需資源(如jar文件、配置文件、計(jì)算所得輸入劃分等)復(fù)制到作業(yè)對(duì)于的HDFS上(見(jiàn)步驟3)

  (5)調(diào)用JobTracker對(duì)象的submitJob()方法來(lái)真正提交作業(yè),通知JobTracker作業(yè)準(zhǔn)備執(zhí)行(見(jiàn)步驟4)

?

  初始化作業(yè)

  JobTracker在客戶(hù)端調(diào)用其submitJob()方法后,會(huì)將此調(diào)用放入內(nèi)部的TaskScheduler變量中,進(jìn)行調(diào)度,默認(rèn)調(diào)度方法為:JobQueueTaskScheduler即FIFO調(diào)度方式。

  初始化作業(yè)分為如下幾個(gè)步驟:

  (1)從HDFS中讀取作業(yè)對(duì)應(yīng)的job.split(見(jiàn)步驟6),JobTracker從HDFS中作業(yè)對(duì)應(yīng)的路徑獲取JobClient在步驟3中寫(xiě)入的job.split文件,得到輸入數(shù)據(jù)的劃分信息,為后面初始化過(guò)程中Map任務(wù)的分配做好準(zhǔn)備。

  (2)創(chuàng)建并初始化Map任務(wù)和Reduce任務(wù)。

  (3)創(chuàng)建兩個(gè)初始化Task,根據(jù)個(gè)數(shù)和輸入劃分已經(jīng)配置的信息,并分別初始化Map和Reduce。

?

  分配任務(wù):

  TaskTracker和JobTracker之間的通信和任務(wù)分配都是通過(guò)心跳機(jī)制完成的。TaskTracker會(huì)以一定間隔時(shí)間向JobTracker發(fā)送心跳,告訴自己是否存活,準(zhǔn)備執(zhí)行新任務(wù);而JobTracker在接收到心跳信息后會(huì)查看是否有待分配任務(wù),如果有,則會(huì)分配給TaskTracker。

?

  執(zhí)行任務(wù):

  當(dāng)TaskTracker接收到新任務(wù)時(shí)就要開(kāi)始運(yùn)行任務(wù),第一步就是將任務(wù)本地化,將任務(wù)所需的數(shù)據(jù)、配置信息、程序代碼從HDFS復(fù)制到TaskTracker本地(將步驟8)。該過(guò)程主要通過(guò)localizeJob()方法來(lái)實(shí)現(xiàn)任務(wù)的本地化,具體包括以下幾個(gè)步驟:

  (1)將job.split復(fù)制到本地

  (2)將job.jar復(fù)制到本地

  (3)將job的配置信息寫(xiě)入job.xml

  (4)創(chuàng)建本地任務(wù)目錄,解壓job.jar

  (5)調(diào)用launchTaskForJob()方法發(fā)布任務(wù)(見(jiàn)步驟9)

?

  更新任務(wù)執(zhí)行進(jìn)度和狀態(tài):

  由MapReduce作業(yè)分割成的每個(gè)任務(wù)中都有一組計(jì)數(shù)器,他們對(duì)任務(wù)執(zhí)行過(guò)程中的進(jìn)度組成事件進(jìn)行計(jì)數(shù)。如果任務(wù)要報(bào)告進(jìn)度,它便會(huì)設(shè)置一個(gè)標(biāo)志以表明狀態(tài)變化將會(huì)發(fā)送到TaskTracker上,另一個(gè)監(jiān)聽(tīng)線程檢查到這標(biāo)志后,會(huì)告知TaskTracker當(dāng)前的任務(wù)狀態(tài)。

?

  完成作業(yè):

  所有TaskTracker任務(wù)的執(zhí)行進(jìn)度信息都匯總到JobTracker處,當(dāng)JobTracker接收到最后一個(gè)任務(wù)的已完成通知后,便把作業(yè)的狀態(tài)設(shè)置為“成功”。

?

  Shuffle和排序:

  在Map和Reduce之間有一個(gè)叫做Shuffle的過(guò)程,主要的工作是將Map的輸出結(jié)果進(jìn)行一定的排序和分割再交給Reduce,從某種程度上說(shuō),Shuffle過(guò)程的性能與整個(gè)MapReduce的性能直接相關(guān)。

  Shuffle過(guò)程分為Map和Reduce端。Map端的Shuffle過(guò)程是對(duì)Map的結(jié)果進(jìn)行劃分(partition)、排序(sort)和分割(spill),然后將屬于同一個(gè)劃分的輸出合并在一起(merge)并寫(xiě)在磁盤(pán)上,同時(shí)按照不同的劃分將結(jié)果發(fā)送給對(duì)應(yīng)的Reduce(Map輸出的劃分與Reduce的對(duì)應(yīng)關(guān)系由JobTracker確定)。

  Reduce端又會(huì)將各個(gè)Map送來(lái)的屬于同一個(gè)劃分的輸出進(jìn)行合并(merge),然后對(duì)merge的結(jié)果進(jìn)行排序,最后交給Reduce處理。

  

  對(duì)于Hadoop等大數(shù)據(jù)技術(shù)有興趣的歡迎加群413471695交流討論^_^

  本文鏈接:《Hadoop閱讀筆記(四)——一幅圖看透MapReduce機(jī)制》

?

友情贊助

如果你覺(jué)得博主的文章對(duì)你那么一點(diǎn)小幫助,恰巧你又有想打賞博主的小沖動(dòng),那么事不宜遲,趕緊掃一掃,小額地贊助下,攢個(gè)奶粉錢(qián),也是讓博主有動(dòng)力繼續(xù)努力,寫(xiě)出更好的文章^^。

    1. 支付寶                          2. 微信

                      

轉(zhuǎn)載于:https://www.cnblogs.com/bigdataZJ/p/hadoopreading4.html

總結(jié)

以上是生活随笔為你收集整理的Hadoop阅读笔记(四)——一幅图看透MapReduce机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。