阿里巴巴工程師談大數(shù)據(jù)-分布式計(jì)算,你想知道嗎?

分布式存儲(chǔ)(HDFS)和NoSQL數(shù)據(jù)庫是解決大規(guī)模數(shù)據(jù)高效存儲(chǔ)的問題, HDFS是底層的存儲(chǔ)方案。NoSQL是在這底層技術(shù)之上的應(yīng)用。
是解決數(shù)據(jù)存儲(chǔ)的問題。
分布式計(jì)算是解決大規(guī)模數(shù)據(jù)高效處理的問題 。
是解決數(shù)據(jù)計(jì)算的問題
分布式并行編程可以大幅提高程序性能,實(shí)現(xiàn)高效的批量數(shù)據(jù)處理。分布式程序運(yùn)行在大規(guī)模計(jì)算機(jī)集群上(廉價(jià)的服務(wù)器),可以并行執(zhí)行大規(guī)模數(shù)據(jù)處理任務(wù),從而獲得海量的計(jì)算能力。
(1) MapReduce簡介
MapReduce是一種并行編程模型,用于大規(guī)模數(shù)據(jù)集(大于1 TB)的并行運(yùn)算,它將復(fù)雜的、運(yùn)行于大規(guī)模集群上的并行計(jì)算過程高度抽象到兩個(gè)函數(shù):?Map和Reduce。
它極大地方便了分布式編程工作, 編程人員在不會(huì)分布式并行原理的情況下,也可以很容的將自己的程序運(yùn)行在分布式系統(tǒng)上,完成海量數(shù)據(jù)集的計(jì)算。
摩爾定律失效: 大規(guī)模集成電路制作工藝將達(dá)到一個(gè)極限,從2005年開始摩爾定律逐漸失效,就不能把希望過多的寄托于性能更高的CPU上,人們開始借助于分布式并行編程來提高程序性能。獲得海量計(jì)算能力。
谷歌公司最先提出了分布式并行編程模型MapReduce,Hadoop MapReduce是它的開源實(shí)現(xiàn),后者比前者使用門檻低很多。
(2)MapReduce函數(shù)
MapReduce模型的核心思想是?“分而治之” 。
高度抽象到兩個(gè)函數(shù):?Map和Reduce 。
2.1 Map函數(shù):任務(wù)拆分
把一個(gè)大任務(wù)拆分成小任務(wù)在不同計(jì)算機(jī)上執(zhí)行,通常是運(yùn)行在存儲(chǔ)數(shù)據(jù)的節(jié)點(diǎn)上。這樣計(jì)算和數(shù)據(jù)就可以一起運(yùn)行。不需要額外的數(shù)據(jù)傳輸開銷。
Map任務(wù)的處理結(jié)果也保存在本地節(jié)點(diǎn)里面。
輸入: Map < k1 , v1 >
輸出: List < k2 , v2 >
2.2 Reduce函數(shù) 處理結(jié)果匯總
map函數(shù)最終的計(jì)算結(jié)果會(huì)作為Reduce函數(shù)的輸入,最終由Reduce任務(wù)匯總輸出最終結(jié)果。并把結(jié)果寫入到分布式文件系統(tǒng)里面。
Reduce < k2 , List(v2) >
(3)設(shè)計(jì)理念
劃重點(diǎn):
MapReduce設(shè)計(jì)的一個(gè)理念就是“計(jì)算向數(shù)據(jù)靠攏”,而不是“數(shù)據(jù)向計(jì)算靠攏”,因?yàn)橐苿?dòng)數(shù)據(jù)需要大量的網(wǎng)絡(luò)傳輸開銷,尤其是在大規(guī)模數(shù)據(jù)環(huán)境下,這種開銷尤為驚人,所以,移動(dòng)計(jì)算要比移動(dòng)數(shù)據(jù)更加經(jīng)濟(jì)。
本著這個(gè)理念,在一個(gè)集群中,只要有可能,MapReduce框架就會(huì)將
Map程序就近地在HDFS數(shù)據(jù)所在的節(jié)點(diǎn)運(yùn)行,即將計(jì)算節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)放在一起運(yùn)行,從而減少了節(jié)點(diǎn)間的數(shù)據(jù)移動(dòng)開銷。
數(shù)據(jù)不動(dòng),CPU動(dòng)
段譽(yù)是在天龍寺學(xué)的六脈神劍劍譜(數(shù)據(jù)),鳩摩智這個(gè)超強(qiáng)CPU也是去天龍寺?lián)尩膭ψV。

鳩摩智出場自配音響,足與扛著音響入戰(zhàn)陣的喬幫主相媲美。
(4 ) 分布式計(jì)算舉例

處理步驟:
1、 map函數(shù)拆分任務(wù)
名稱節(jié)點(diǎn)拆分任務(wù),保證在數(shù)據(jù)節(jié)點(diǎn)上本地計(jì)算
map函數(shù)輸入
Map(小任務(wù)A, sum(10+20+30))
Map(小任務(wù)B, sum(40+50+60))
Map(小任務(wù)C, sum(70+80+90))
2、map結(jié)果輸出?
Map(小任務(wù)A, 60)
Map(小任務(wù)B, 150)
Map(小任務(wù)C,240)
輸出的中間計(jì)算結(jié)果存儲(chǔ)在本地, 數(shù)據(jù)節(jié)點(diǎn)里面。
3、Reduce匯總結(jié)果, map的輸出,作為Reduce的輸入
(由Shuffle函數(shù)負(fù)責(zé)對應(yīng)他們之間的關(guān)系)
輸入:
Reduce(結(jié)果匯總, sum(60+150+240) )
輸出:Reduce(結(jié)果匯總,450)
(5)技術(shù)標(biāo)簽
MapReduce程序由三個(gè)步驟組成:
Map()步驟
其中名稱節(jié)點(diǎn)導(dǎo)人輸人數(shù)據(jù),在小子集中解析這些數(shù)據(jù),并將工作分配給數(shù)據(jù)節(jié)點(diǎn)。任何數(shù)據(jù)節(jié)點(diǎn)都將生成map0函數(shù)的中間結(jié)果,并以鍵/值對的形式存儲(chǔ)在分布式文件中。輸出文件位置在映射階段結(jié)束時(shí)通知名稱節(jié)點(diǎn)。
Shuffle ()步驟
‘洗牌’ :將中間結(jié)果分區(qū)排序整理后發(fā)給Reduce。
名稱節(jié)點(diǎn)從數(shù)據(jù)節(jié)點(diǎn)收集答案,將值列表中共享相同密鑰的鍵值對組合在一起,并按鍵值排序。排序可以是字典序、遞增序或用戶定義的序。
Shuffle 過程本質(zhì)上都是將 Map 端獲得的數(shù)據(jù)使用分區(qū)器進(jìn)行劃分,并將數(shù)據(jù)發(fā)送給對應(yīng)的 Reducer 的過程。
Reduce() 步驟
執(zhí)行匯總操作。 并輸出計(jì)算結(jié)果。
Hadoop框架是用Java實(shí)現(xiàn)的,但是MapReduce應(yīng)用程序則不一定要用Java來寫。
更多詳細(xì)免費(fèi)視頻點(diǎn)擊-分布式計(jì)算