2022-11-17
計(jì)算 數(shù)據(jù) 分布式 mapreduce
為什么要學(xué)習(xí)MapReduce
2004年,谷歌發(fā)表了一篇名為《MapReduce》的論文,主要介紹了如何在分布式的存儲(chǔ)系統(tǒng)上對(duì)數(shù)據(jù)進(jìn)行高效率的計(jì)算。2005年,Nutch團(tuán)隊(duì)使用Java語(yǔ)言實(shí)現(xiàn)了這個(gè)技術(shù),并命名為MapReduce。時(shí)至今日,MapReduce是Apache Hadoop的核心模塊之一,是運(yùn)行在HDFS上的分布式運(yùn)算程序的編程框架,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運(yùn)算。其中的概念,"Map(映射)"和"Reduce(歸約)",是它們的主要思想,都是從函數(shù)式編程語(yǔ)言里借來(lái)的,還有從矢量編程語(yǔ)言里借來(lái)的特性。
在過(guò)去的很長(zhǎng)一段時(shí)間里,CPU的性能都會(huì)遵循”摩爾定律“,在性能上每隔18個(gè)月左右就是提高一倍。那個(gè)時(shí)候,不需要對(duì)程序做任何改變,僅僅通過(guò)使用更優(yōu)秀的CPU,就可以進(jìn)行性能提升。但是現(xiàn)在,在CPU性能提升的道路上,人類已經(jīng)到達(dá)了制作工藝的瓶頸,因此,我們不能再把希望寄托在性能更高的CPU身上了。
現(xiàn)在這個(gè)時(shí)候,大規(guī)模數(shù)據(jù)存儲(chǔ)在分布式文件系統(tǒng)上,人們也開(kāi)始采用分布式并行編程來(lái)提高程序的性能。分布式程序運(yùn)行在大規(guī)模計(jì)算機(jī)集群上,集群是大量的廉價(jià)服務(wù)器,可以并行執(zhí)行大規(guī)模數(shù)據(jù)處理任務(wù),這樣就獲得了海量的計(jì)算能力
分布式并行編程比傳統(tǒng)的程序有明顯的區(qū)別,它運(yùn)行在大量計(jì)算機(jī)構(gòu)成的集群上,可以充分利用集群的并行處理能力;同時(shí),通過(guò)向集群中增加新的計(jì)算節(jié)點(diǎn),就可以很容易的實(shí)現(xiàn)集群計(jì)算能力的擴(kuò)展。
MapReduce主要解決的是分布式文件存儲(chǔ)系統(tǒng)上,數(shù)據(jù)的分布式計(jì)算的問(wèn)題。在上述導(dǎo)讀部分我們介紹過(guò)一個(gè)WordCount的案例,就是一個(gè)非常典型的分布式計(jì)算的案例。如果我們將所有的需要處理的數(shù)據(jù)移動(dòng)到一個(gè)節(jié)點(diǎn)上進(jìn)行處理,那么只是在數(shù)據(jù)傳輸?shù)倪^(guò)程中就得消耗大量的時(shí)間,而且還可能在一臺(tái)節(jié)點(diǎn)存不下這大量的數(shù)據(jù)。就算是能夠存儲(chǔ)下,也能夠接受數(shù)據(jù)移動(dòng)所帶來(lái)的時(shí)間消耗,集群中其他節(jié)點(diǎn)的計(jì)算資源也都是在閑置的,不能高效率的利用集群。
因此我們就需要進(jìn)行分布式的計(jì)算,將計(jì)算程序分發(fā)給不同的節(jié)點(diǎn)。在每一個(gè)節(jié)點(diǎn)上處理自己節(jié)點(diǎn)的數(shù)據(jù),最后將每一個(gè)節(jié)點(diǎn)的數(shù)據(jù)處理結(jié)果匯總在一起。而在分布式計(jì)算的過(guò)程中會(huì)遇到很多的分布式計(jì)算的細(xì)節(jié)問(wèn)題,這些問(wèn)題都是需要開(kāi)發(fā)人員去考慮的。那么如何去解決這些問(wèn)題呢?
MapReduce是一個(gè)開(kāi)源的、分布式的計(jì)算框架,封裝了分布式計(jì)算程序的實(shí)現(xiàn)細(xì)節(jié),使得開(kāi)發(fā)人員不需要了解分布式計(jì)算底層實(shí)現(xiàn)的情況下,就可以去開(kāi)發(fā)一個(gè)分布式的計(jì)算程序。開(kāi)發(fā)人員只需要將重心放在業(yè)務(wù)邏輯的實(shí)現(xiàn)即可,不需要關(guān)注分布式開(kāi)發(fā)的底層細(xì)節(jié)。因此,對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),可以簡(jiǎn)化不少的工作量,提交程序開(kāi)發(fā)的效率!
MapReduce的核心思想
MapReduce設(shè)計(jì)的一個(gè)理念是“計(jì)算向數(shù)據(jù)靠攏”(移動(dòng)計(jì)算),而不是“數(shù)據(jù)向計(jì)算靠攏”(移動(dòng)數(shù)據(jù))
將用戶編寫的業(yè)務(wù)邏輯代碼和自帶默認(rèn)組件整合成一個(gè)完整的分布式運(yùn)算程序,移動(dòng)到有數(shù)據(jù)存儲(chǔ)的集群節(jié)點(diǎn)上,一是可以減少節(jié)點(diǎn)間的數(shù)據(jù)移動(dòng)開(kāi)銷。二是在存儲(chǔ)節(jié)點(diǎn)上可以并行計(jì)算,大大提高計(jì)算效率問(wèn)題。 因?yàn)橐苿?dòng)數(shù)據(jù)需要大量的網(wǎng)絡(luò)傳輸開(kāi)銷,尤其是在大規(guī)模數(shù)據(jù)環(huán)境下,這種開(kāi)銷尤為驚人,所以移動(dòng)計(jì)算要比移動(dòng)數(shù)據(jù)更加經(jīng)濟(jì)。
MapReduce一個(gè)完整的運(yùn)算分為Map和Reduce兩個(gè)部分。Map會(huì)處理本節(jié)點(diǎn)的原始數(shù)據(jù),產(chǎn)生的數(shù)據(jù)會(huì)臨時(shí)存儲(chǔ)到本地磁盤。Reduce會(huì)跨節(jié)點(diǎn)fetch屬于自己的數(shù)據(jù),并進(jìn)行處理,產(chǎn)生的數(shù)據(jù)會(huì)存儲(chǔ)到HDFS上。
Hadoop的MapReduce核心技術(shù)起源于谷歌在2004年發(fā)表的關(guān)于MapReduce系統(tǒng)的論文介紹。論文中有這么一句話:Our abstraction is inspired by the map and reduce primitives present in Lisp and many other functional languages。這句話提到了MapReduce思想來(lái)源,大致意思是,MapReduce的靈感來(lái)源于函數(shù)式語(yǔ)言(比如Lisp)中的內(nèi)置函數(shù)map(映射)和reduce(規(guī)約)。
簡(jiǎn)單來(lái)說(shuō),在函數(shù)式語(yǔ)言里,map表示對(duì)一個(gè)列表(List)中的每個(gè)元素做計(jì)算,reduce表示對(duì)一個(gè)列表中的每個(gè)元素做迭代計(jì)算。它們具體的計(jì)算是通過(guò)傳入的函數(shù)來(lái)實(shí)現(xiàn)的,map和reduce提供的是計(jì)算的框架。我們想一下,reduce既然能做迭代計(jì)算,那就表示列表中的元素是相關(guān)的(比如我想對(duì)列表中的所有元素做相加求和,那么列表中至少都應(yīng)該是數(shù)值吧)。而map是對(duì)列表中每個(gè)元素做單獨(dú)處理的,這表示列表中可以是雜亂無(wú)章的數(shù)據(jù)。
這樣看來(lái),就有點(diǎn)聯(lián)系了。在MapReduce里,Map處理的是原始數(shù)據(jù),自然是雜亂無(wú)章的,每條數(shù)據(jù)之間互相沒(méi)有關(guān)系;到了Reduce階段,數(shù)據(jù)是以key后面跟著若干個(gè)value來(lái)組織的,這些value有相關(guān)性,至少它們都在一個(gè)key下面,于是就符合函數(shù)式語(yǔ)言里map和reduce的基本思想了。
開(kāi)班時(shí)間:2021-04-12(深圳)
開(kāi)班盛況開(kāi)班時(shí)間:2021-05-17(北京)
開(kāi)班盛況開(kāi)班時(shí)間:2021-03-22(杭州)
開(kāi)班盛況開(kāi)班時(shí)間:2021-04-26(北京)
開(kāi)班盛況開(kāi)班時(shí)間:2021-05-10(北京)
開(kāi)班盛況開(kāi)班時(shí)間:2021-02-22(北京)
開(kāi)班盛況開(kāi)班時(shí)間:2021-07-12(北京)
預(yù)約報(bào)名開(kāi)班時(shí)間:2020-09-21(上海)
開(kāi)班盛況開(kāi)班時(shí)間:2021-07-12(北京)
預(yù)約報(bào)名開(kāi)班時(shí)間:2019-07-22(北京)
開(kāi)班盛況
Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right
京ICP備12003911號(hào)-5
京公網(wǎng)安備 11010802035720號(hào)