日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Google MapReduce架构设计

發(fā)布時(shí)間:2025/3/21 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Google MapReduce架构设计 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前情回顧

Google MapReduce到底解決什么問題?

Google MapReduce是Google產(chǎn)出的一個(gè)編程模型,同時(shí)Google也給出架構(gòu)實(shí)現(xiàn),它能夠解決“能用分治法解決的問題”。

?

Google MapReduce有啥巧妙優(yōu)化?

  • 分區(qū)函數(shù):保證不同map輸出的相同key,落到同一個(gè)reduce里

  • 合并函數(shù):在map結(jié)束時(shí),對(duì)相同key的多個(gè)輸出做本地合并,節(jié)省總體資源

  • 輸入文件到map如何切分:隨意,切分均勻就行

畫外音:看懂了這個(gè)流程,對(duì)工程架構(gòu)的理解,會(huì)容易很多。

?

上述執(zhí)行流程,Google MapReduce通過怎樣的工程架構(gòu)實(shí)現(xiàn)的呢?

先看下總體架構(gòu)圖,有個(gè)直觀的印象。

?

用戶使用GoogleMR系統(tǒng),必須輸入的是什么?

  • 輸入數(shù)據(jù),必選

畫外音:否則系統(tǒng)處理啥。

  • map函數(shù),必選

  • reduce函數(shù),必選

畫外音:分治法,分與合的業(yè)務(wù)邏輯。

  • 分區(qū)函數(shù),必選

畫外音:保證同一個(gè)key,在合并階段,必須落到同一個(gè)reduce上,系統(tǒng)提供默認(rèn)hash(key)法。

  • 合并函數(shù),可選

畫外音:看用戶是否需要在map結(jié)束階段進(jìn)行優(yōu)化。

?

用戶提供各個(gè)輸入后,GoogleMR的執(zhí)行流程是什么?

畫外音:

不妨假設(shè),用戶設(shè)置了M個(gè)map節(jié)點(diǎn),R個(gè)reduce節(jié)點(diǎn);例如:M=500,R=200

(1) 在集群中創(chuàng)建大量可執(zhí)行實(shí)例副本(fork);

(2) 這些副本中有一個(gè)master,其他均為worker,任務(wù)的分配由master完成, M個(gè)map實(shí)例和R個(gè)reduce實(shí)例由worker完成;

(3) 將輸入數(shù)據(jù)分成M份,然后被分配到map任務(wù)的worker,從其中一份讀取輸入數(shù)據(jù),執(zhí)行用戶的map函數(shù)處理,并在本地內(nèi)存生成臨時(shí)數(shù)據(jù);

(4) 本地內(nèi)存臨時(shí)數(shù)據(jù),通過分區(qū)函數(shù),被分成R份,周期性的寫到本地磁盤,由master調(diào)度,傳給被分配到reduce任務(wù)的worker;

(5) 負(fù)責(zé)reduce任務(wù)的worker,從遠(yuǎn)程讀取多個(gè)map輸出的數(shù)據(jù),執(zhí)行用戶的reduce函數(shù)處理,處理結(jié)果寫入輸出文件;

畫外音:可能對(duì)key要進(jìn)行外部排序。

(6) 所有map和reduce的worker都結(jié)束工作后,master喚醒用戶程序,MapReduce調(diào)用返回,結(jié)果被輸出到了R個(gè)文件中。

?

GoogleMR系統(tǒng)里的master和worker是啥?

(1)?master:單點(diǎn)master會(huì)存儲(chǔ)一些元數(shù)據(jù),監(jiān)控所有map與reduce的狀態(tài),記錄哪個(gè)數(shù)據(jù)要給哪個(gè)map,哪個(gè)數(shù)據(jù)要給哪個(gè)reduce,掌控全局視野,做中控;

畫外音:是不是和GFS的master非常像?

(2)?worker:多個(gè)worker進(jìn)行業(yè)務(wù)邏輯處理,具體一個(gè)worker是用來執(zhí)行map還是reduce,是由master調(diào)度的;

畫外音:是不是和工作線程池非常像?這里的worker是分布在多臺(tái)機(jī)器上的而已。

?

master的高可用是如何保證的?

一個(gè)簡單的方法是,將元數(shù)據(jù)固化到磁盤上,用一個(gè)shadow-master來做高可用。

畫外音:GFS不就是這么干的么?

?

然而現(xiàn)實(shí)情況是:沒有將元數(shù)據(jù)固化到磁盤上,元數(shù)據(jù)被存放在master的內(nèi)存里用以提高工作效率,當(dāng)master掛掉后,通知用戶“任務(wù)執(zhí)行失敗”,讓其選擇重新執(zhí)行。

畫外音:

(1) 單點(diǎn)master,掌控全局視野,能讓系統(tǒng)的復(fù)雜性降低非常多;

(2) master掛掉的概率很小;

(3) 不做高可用,能讓系統(tǒng)的復(fù)雜性降低非常多;

?

worker的高可用是如何保證的?

master會(huì)周期性的ping每個(gè)worker,如果超時(shí)未返回,master會(huì)把對(duì)應(yīng)的worker置為無效,把這個(gè)worker的工作任務(wù)重新執(zhí)行:

  • 如果重新執(zhí)行的是reduce任務(wù),不需要有額外的通知

  • 如果重新執(zhí)行的是map任務(wù),需要通知執(zhí)行reduce的worker節(jié)點(diǎn),輸入數(shù)據(jù)換了一個(gè)worker

?

隨時(shí)都可能有map或者reduce掛掉,任務(wù)完成前重新被執(zhí)行,會(huì)不會(huì)影響MR的最終結(jié)果?

在用戶輸入不變的情況下,MR的輸出一定是不變的,這就要求MR系統(tǒng)必須具備冪等性:

  • 對(duì)相同的輸入,不管哪個(gè)負(fù)責(zé)map的worker執(zhí)行的結(jié)果,一定是不變的,產(chǎn)出的R個(gè)本地輸出文件內(nèi)容也一定是不變的

  • 對(duì)于M個(gè)map,每個(gè)map輸出的R個(gè)本地文件,只要這些輸入不變,對(duì)應(yīng)接收這些數(shù)據(jù)的reduce的worker執(zhí)行結(jié)果,一定是不變的,輸出文件內(nèi)容也也一定是不變的

?

長尾效應(yīng)怎么解決?

一個(gè)MR執(zhí)行時(shí)間的最大短板,往往是“長尾worker”。

導(dǎo)致“長尾worker”的原因有很多:

(1) 用戶的分區(qū)函數(shù)設(shè)計(jì)得不合理,導(dǎo)致某些reduce負(fù)載不均,要處理大量的數(shù)據(jù);

畫外音:

最壞的情況,所有數(shù)據(jù)最終都落到一個(gè)reduce上,分布式并行處理,轉(zhuǎn)變?yōu)榱藛螜C(jī)串行處理;

所以,分區(qū)函數(shù)的負(fù)載均衡性,是用戶需要考慮的。

(2) 因?yàn)橄到y(tǒng)的原因,worker所在的機(jī)器磁盤壞了,CPU有問題,也可能導(dǎo)致任務(wù)執(zhí)行很慢;

GoogleMR有一個(gè)“備用worker”的機(jī)制,當(dāng)某些worker的執(zhí)行時(shí)間超出預(yù)期時(shí),會(huì)啟動(dòng)另一個(gè)worker執(zhí)行相同的任務(wù),以嘗試解決長尾效應(yīng)。

?

總結(jié)

Google MapReduce架構(gòu),提現(xiàn)了很多經(jīng)典架構(gòu)實(shí)踐:

  • 單點(diǎn)master簡化系統(tǒng)復(fù)雜度

  • 單點(diǎn)master不高可用,簡化系統(tǒng)復(fù)雜度

  • master對(duì)worker的監(jiān)控以及重啟,保證worker高可用

  • 冪等性,保證結(jié)果的正確性

  • 多個(gè)worker執(zhí)行同一個(gè)任務(wù)優(yōu)化長尾問題

總結(jié)

以上是生活随笔為你收集整理的Google MapReduce架构设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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