大數(shù)據(jù)之MapReduce分布編程模型

導(dǎo)讀: 計(jì)算機(jī)科學(xué)是算法與算法變換的科學(xué),算法是計(jì)算機(jī)科學(xué)的基石仲锄。 任何一個(gè)計(jì)算問題的分析與建模冰蘑,幾乎都可以歸為算法問題胸遇。?MapReduce算法模型是由Google公司針對(duì)大規(guī)模群組中的海量數(shù)據(jù)處理而提出的分布編程模型厌秒,主要應(yīng)用于大規(guī)模數(shù)據(jù)集{大于1TB}的分布并行運(yùn)算读拆。

MapReduce模型中的Map{映射}和Reduce{化簡(jiǎn)}創(chuàng)意來自函數(shù)型編程語言,同是也繼承了向量型編程語言的特性鸵闪。 MapReduce模型能夠使程序員在不了解分布式并行編程的情況下檐晕,將自己書寫的程序在分布式系統(tǒng)上運(yùn)行。MapReduce模型主要實(shí)現(xiàn)了映射與化簡(jiǎn)兩個(gè)核心功能蚌讼,分別由Map和Reduce完成辟灰,這兩個(gè)函數(shù)也是函數(shù)型語言中常用的函數(shù),由用戶負(fù)責(zé)實(shí)現(xiàn)啦逆。

Map函數(shù)應(yīng)用于集合中的所有成員伞矩,然后返回一個(gè)基于這個(gè)處理的結(jié)果集。而Reduce函數(shù)是從兩個(gè)或更多個(gè)Map結(jié)果中夏志,通過多個(gè)線程乃坤、進(jìn)程或者獨(dú)立系統(tǒng)并行執(zhí)行處理的結(jié)果進(jìn)行分類和歸納。 一個(gè)Map函數(shù)用來把對(duì)映象成一組新的鍵值對(duì)沟蔑,Reduce函數(shù)用來對(duì)同一個(gè)鍵的值進(jìn)行合并湿诊。

下面給大家著重介紹一下函數(shù)式編程范式,函數(shù)式編程是一種編程范式瘦材,在這種編程范式中厅须,更多地使用了函數(shù)運(yùn)算。

函數(shù)型語言與函數(shù)式編程

函數(shù)型語言是一種典型的程序設(shè)計(jì)語言食棕。函數(shù)型語言的特點(diǎn)是把問題求解過程表示成塊結(jié)構(gòu)朗和,對(duì)調(diào)用塊的調(diào)用者來說,每個(gè)塊都有輸入數(shù)據(jù)和經(jīng)過加工處理后的輸出數(shù)據(jù)簿晓。每個(gè)塊的功能就如同函數(shù)的功能眶拉,例如LISP語言、ML語言等都屬于函數(shù)型語言憔儿。

利用函數(shù)型語言編程就是一種函數(shù)式編程忆植,函數(shù)式編程使用一系列的函數(shù)解決問題。任何一個(gè)函數(shù)僅接受輸入數(shù)據(jù)并產(chǎn)生輸出函數(shù)值谒臼,不包含任何能影響產(chǎn)生輸出的內(nèi)部狀態(tài)朝刊。任何情況下,使用相同的參數(shù)調(diào)用函數(shù)始終能得到一致的結(jié)果蜈缤。

在一個(gè)函數(shù)式的程序中拾氓,輸入數(shù)據(jù)要通過一系列的函數(shù),每個(gè)函數(shù)根據(jù)它的輸入產(chǎn)生輸出劫樟。函數(shù)式編程位于面向?qū)ο缶幊痰膶?duì)立面痪枫。面向?qū)ο缶幊掏ǔ0瑑?nèi)部狀態(tài){字段}和許多能修改這些狀態(tài)的函數(shù)织堂,程序運(yùn)行中則不斷的修改狀態(tài)。 函數(shù)式編程則極力避免狀態(tài)改動(dòng)奶陈。對(duì)于復(fù)雜的系統(tǒng)易阳,可以同時(shí)使用函數(shù)式編程和面向?qū)ο缶幊蹋谶@種混合應(yīng)用中吃粒,既采用了面向?qū)ο蠹夹g(shù)建模潦俺,還獲得了函數(shù)式編程風(fēng)格的優(yōu)點(diǎn)。

函數(shù)式編程的優(yōu)點(diǎn)

函數(shù)式編程具有如下優(yōu)點(diǎn):

1徐勃,邏輯可證

由于沒有邊界效應(yīng)事示,所以更容易從邏輯上證明程序正確性,而不是僅通過測(cè)試完成僻肖。

2肖爵,模塊化

函數(shù)式編程以簡(jiǎn)單為原則,一個(gè)函數(shù)只做一件事臀脏,將大的功能模塊拆分成盡可能小的功能模塊劝堪。小的功能模塊更易于閱讀和檢查錯(cuò)誤。

3揉稚,組件化

更容易利用簡(jiǎn)單的小函數(shù)加以組合形成新的功能更強(qiáng)的函數(shù)秒啦,體現(xiàn)了組件化的特點(diǎn)。

4搀玖,易于調(diào)試

細(xì)化的余境、定義清晰的函數(shù)能夠使得調(diào)試更加簡(jiǎn)單,當(dāng)程序運(yùn)行不正常時(shí)灌诅,每個(gè)函數(shù)都是檢查數(shù)據(jù)是否正確的連接口芳来,能更快速地排除沒有問題的代碼,定位到出現(xiàn)問題的地方猜拾。

5绣张,易于測(cè)試

函數(shù)不依賴于系統(tǒng)狀態(tài),無須在測(cè)試前構(gòu)造測(cè)試樁关带,更加容易編寫單元測(cè)試的代碼。

6沼撕,更高的生產(chǎn)率

函數(shù)式編程產(chǎn)生的代碼比其他技術(shù)更簡(jiǎn)潔宋雏,往往是其他技術(shù)的一半左右,并且更容易閱讀和維護(hù)务豺。

函數(shù)式編程的特征

1磨总,沒有副作用

函數(shù)程序由一系列函數(shù)對(duì)數(shù)據(jù)的變換構(gòu)成,因?yàn)楹瘮?shù)式編程中的每個(gè)符號(hào)都是最終的笼沥,所以從來沒有在某個(gè)地方修改過值蚪燕,也沒有函數(shù)修改過在其作用域之外的量并被其他函數(shù)使用娶牌。這表明函數(shù)求值的結(jié)果只是其返回值,而唯一影響其返回值的就是函數(shù)的參數(shù)馆纳,函數(shù)操作數(shù)據(jù)诗良,所以函數(shù)沒有產(chǎn)生副作用。

2鲁驶,無狀態(tài)的編程

在現(xiàn)實(shí)情況中鉴裹,狀態(tài)不可能一直保持不變,而狀態(tài)必然需要改變與傳遞钥弯,那么在函數(shù)式編程中的則是將其保存在函數(shù)的參數(shù)中径荔,作為函數(shù)的附屬品來傳遞。

3脆霎,輸入值和輸出值

在函數(shù)式編程中总处,只有輸入值和輸出值。函數(shù)式基本單位睛蛛,幾乎被用作所有部分鹦马,包括最簡(jiǎn)單的計(jì)算,甚至連變量都被計(jì)算所取代玖院。變量只是一個(gè)名稱菠红,而不是一個(gè)儲(chǔ)存單元,這是函數(shù)式編程與傳統(tǒng)的命令式編程最經(jīng)典的不同之處难菌。

在面向?qū)ο缶幊讨惺运荩瑢?duì)象傳來傳去。在函數(shù)式編程中郊酒,是將函數(shù)傳來傳去遇绞,又將這個(gè)函數(shù)稱為高階函數(shù)。在數(shù)學(xué)和計(jì)算機(jī)科學(xué)中燎窘,高階函數(shù)是至少滿足下列一個(gè)條件的函數(shù):

@ 接受一個(gè)或多個(gè)函數(shù)作為輸入摹闽。

@輸出一個(gè)函數(shù)值。

好了褐健,今天就分享到這付鹿,下次將給大家分享映射函數(shù)與化簡(jiǎn)函數(shù),希望大家多多關(guān)注哦蚜迅!對(duì)大數(shù)據(jù)感興趣的可以加入大數(shù)據(jù)群:725197860

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舵匾,一起剝皮案震驚了整個(gè)濱河市衣式,隨后出現(xiàn)的幾起案子门怪,更是在濱河造成了極大的恐慌,老刑警劉巖森瘪,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刹帕,死亡現(xiàn)場(chǎng)離奇詭異吵血,居然都是意外死亡谎替,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門蹋辅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钱贯,“玉大人,你說我怎么就攤上這事晕翠∨缫ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵淋肾,是天一觀的道長(zhǎng)硫麻。 經(jīng)常有香客問我,道長(zhǎng)樊卓,這世上最難降的妖魔是什么拿愧? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮碌尔,結(jié)果婚禮上浇辜,老公的妹妹穿的比我還像新娘。我一直安慰自己唾戚,他們只是感情好柳洋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叹坦,像睡著了一般熊镣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上募书,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天绪囱,我揣著相機(jī)與錄音,去河邊找鬼莹捡。 笑死鬼吵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的篮赢。 我是一名探鬼主播齿椅,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼启泣!你這毒婦竟也來了媒咳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤种远,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后顽耳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坠敷,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妙同,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膝迎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粥帚。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖限次,靈堂內(nèi)的尸體忽然破棺而出芒涡,到底是詐尸還是另有隱情,我是刑警寧澤卖漫,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布费尽,位于F島的核電站,受9級(jí)特大地震影響羊始,放射性物質(zhì)發(fā)生泄漏旱幼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一突委、第九天 我趴在偏房一處隱蔽的房頂上張望柏卤。 院中可真熱鬧,春花似錦匀油、人聲如沸缘缚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)桥滨。三九已至,卻和暖如春钝侠,著一層夾襖步出監(jiān)牢的瞬間该园,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工帅韧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留里初,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓忽舟,卻偏偏與公主長(zhǎng)得像双妨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叮阅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Zookeeper用于集群主備切換刁品。 YARN讓集群具備更好的擴(kuò)展性。 Spark沒有存儲(chǔ)能力浩姥。 Spark的Ma...
    Yobhel閱讀 7,277評(píng)論 0 34
  • MapReduce是一個(gè)數(shù)據(jù)處理的編程模型挑随。這個(gè)模型很簡(jiǎn)單,但也不是簡(jiǎn)單到不能夠支持一些有用的語言勒叠。Hadoop能...
    單行線的旋律閱讀 1,518評(píng)論 0 2
  • 或?qū)挾蛋ぃ蛘嗝希蜷L(zhǎng),或短 那明滅不一的拌汇,是思念的存在 斑駁的小巷柒桑,喧鬧的人海 人世間一場(chǎng)又一場(chǎng)的風(fēng)來 灰色的對(duì)白,人...
    李瑞祥閱讀 1,810評(píng)論 31 46
  • 1.看透“學(xué)習(xí)筆記本”的方法:首先不要再照抄板書 2.用“空白的一秒”創(chuàng)造“難以忘記的記憶” 記憶的關(guān)鍵在于“用眼...
    yinjunhee閱讀 3,764評(píng)論 7 64
  • 車子停靠在空無一人的林間公路上与倡,雪飄了又停界逛,云霧靠近又散開,陽(yáng)光照在亮晶晶的雪地上蒸走,舉目遠(yuǎn)眺仇奶,有種萬水千山的感覺。...
    郭襄說閱讀 1,318評(píng)論 8 9