初識(shí)MapReduce的應(yīng)用場(chǎng)景(附JAVA和Python代碼)
從這篇文章開(kāi)始,我會(huì)開(kāi)始系統(tǒng)性地輸出在大數(shù)據(jù)踩坑過(guò)程中的積累,后面會(huì)涉及到實(shí)戰(zhàn)項(xiàng)目的具體操作,目前的規(guī)劃是按照系列來(lái)更新,力爭(zhēng)做到一個(gè)系列在5篇文章之內(nèi)總結(jié)出最核心的干貨,如果是涉及到理論方面的文章,會(huì)以畫圖的方式來(lái)講解,如果是涉及到操作方面,會(huì)以實(shí)際的代碼來(lái)演示。
這篇是MapReduce系列的第一篇,初識(shí)MapReduce的應(yīng)用場(chǎng)景,在文章后面會(huì)有關(guān)于代碼的演示。
Hadoop作為Apache旗下的一個(gè)以Java語(yǔ)言實(shí)現(xiàn)的分布式計(jì)算開(kāi)源框架,其由兩個(gè)部分組成,一個(gè)是分布式的文件系統(tǒng)HDFS,另一個(gè)是批處理計(jì)算框架MapReduce。這篇文章作為MapReduce系列的第一篇文章,會(huì)從MapReduce的產(chǎn)生背景、框架的計(jì)算流程、應(yīng)用場(chǎng)景和演示Demo來(lái)講解,主要是讓大家對(duì)MapReduce的這個(gè)批計(jì)算框架有個(gè)初步的了解及簡(jiǎn)單的部署和使用。
目錄
MapReduce的產(chǎn)生背景
MapReduce的計(jì)算流程
MapReduce的框架架構(gòu)
MapReduce的生命周期
應(yīng)用場(chǎng)景
演示Demo
MapReduce的產(chǎn)生背景
Google 在2004年的時(shí)候在 MapReduce: Simplified Data Processing on Large Clusters 這篇論文中提出了MapReduce 的功能特性和設(shè)計(jì)理念,設(shè)計(jì)MapReduce 的出發(fā)點(diǎn)就是為了解決如何把大問(wèn)題分解成獨(dú)立的小問(wèn)題,再并行解決。例如,MapReduce的經(jīng)典使用場(chǎng)景之一就是對(duì)一篇長(zhǎng)文進(jìn)行詞頻統(tǒng)計(jì),統(tǒng)計(jì)過(guò)程就是先把文章分為一句一句,然后進(jìn)行分割,最后進(jìn)行詞的數(shù)量統(tǒng)計(jì)。
MapReduce的架構(gòu)圖
MapReduce的架構(gòu)圖
這里的Client和TaskTracker我都使用一個(gè)來(lái)簡(jiǎn)化了,在實(shí)際中是會(huì)有很個(gè)Client和TaskTracker的。
我們來(lái)講解下不同的組件作用
Client
Client的含義是指用戶使用MapReduce程序通過(guò)Client來(lái)提交任務(wù)到Job Tracker上,同時(shí)用戶也可以使用Client來(lái)查看一些作業(yè)的運(yùn)行狀態(tài)。
Job Tracker
這個(gè)負(fù)責(zé)的是資源監(jiān)控和作業(yè)調(diào)度。JobTracker會(huì)監(jiān)控著TaskTracker和作業(yè)的健康狀況,會(huì)把失敗的任務(wù)轉(zhuǎn)移到其他節(jié)點(diǎn)上,同時(shí)也監(jiān)控著任務(wù)的執(zhí)行進(jìn)度、資源使用量等情況,會(huì)把這些消息通知任務(wù)調(diào)度器,而調(diào)度器會(huì)在資源空閑的時(shí)候選擇合適的任務(wù)來(lái)使用這些資源。
任務(wù)調(diào)度器是一個(gè)可插拔的模塊,用戶可以根據(jù)自己的需要來(lái)設(shè)計(jì)相對(duì)應(yīng)的調(diào)度器。
TaskTracker
TaskTracker會(huì)周期性地通過(guò)Hearbeat來(lái)向Job Tracker匯報(bào)自己的資源使用情況和任務(wù)的運(yùn)行進(jìn)度。會(huì)接受來(lái)自于JobTaskcker的指令來(lái)執(zhí)行操作(例如啟動(dòng)新任務(wù)、殺死任務(wù)之類的)。
在TaskTracker中通過(guò)的是slot來(lái)進(jìn)行等量劃分一個(gè)節(jié)點(diǎn)上資源量,只用Task獲得slot的時(shí)候才有機(jī)會(huì)去運(yùn)行。調(diào)度器的作用就是進(jìn)行將空閑的slot分配給Task使用,可以配置slot的數(shù)量來(lái)進(jìn)行限定Task上的并發(fā)度。
Task
Task分為Map Task和Reduce Task,在MapReduce中的 split 就是一個(gè) Map Task,split 的大小可以設(shè)置的,由 mapred.max.spilt.size 參數(shù)來(lái)設(shè)置,默認(rèn)是 Hadoop中的block的大小,在Hadoop 2.x中默認(rèn)是128M,在Hadoop 1.x中默認(rèn)是64M。
在Task中的設(shè)置可以這么設(shè)置,一般來(lái)講,會(huì)把一個(gè)文件設(shè)置為一個(gè)split,如果是小文件,那么就會(huì)存在很多的Map Task,這是特別浪費(fèi)資源的,如果split切割的數(shù)據(jù)塊的量大,那么會(huì)導(dǎo)致跨節(jié)點(diǎn)去獲取數(shù)據(jù),這樣也是消耗很多的系統(tǒng)資源的。
MapReduce的生命周期
MapReduce的生命周期
一共分為5個(gè)步驟:
作業(yè)的提交和初始化
由用戶提交作業(yè)之前,需要先把文件上傳到HDFS上,JobClient使用upload來(lái)加載關(guān)于打包好的jar包,JobClient會(huì)RPC創(chuàng)建一個(gè)JobInProcess來(lái)進(jìn)行管理任務(wù),并且創(chuàng)建一個(gè)TaskProcess來(lái)管理控制關(guān)于每一個(gè)Task。
JobTracker調(diào)度任務(wù)
JobTracker會(huì)調(diào)度和管理任務(wù),一發(fā)現(xiàn)有空閑資源,會(huì)按照一個(gè)策略選擇一個(gè)合適的任務(wù)來(lái)使用該資源。
任務(wù)調(diào)度器有兩個(gè)點(diǎn):一個(gè)是保證作業(yè)的順利運(yùn)行,如果有失敗的任務(wù)時(shí),會(huì)轉(zhuǎn)移計(jì)算任務(wù),另一個(gè)是如果某一個(gè)Task的計(jì)算結(jié)果落后于同一個(gè)Task的計(jì)算結(jié)果時(shí),會(huì)啟動(dòng)另一個(gè)Task來(lái)做計(jì)算,最后去計(jì)算結(jié)果最塊的那個(gè)。
任務(wù)運(yùn)行環(huán)境
TaskTracker會(huì)為每一個(gè)Task來(lái)準(zhǔn)備一個(gè)獨(dú)立的JVM從而避免不同的Task在運(yùn)行過(guò)程中的一些影響,同時(shí)也使用了操作系統(tǒng)來(lái)實(shí)現(xiàn)資源隔離防止Task濫用資源。
執(zhí)行任務(wù)
每個(gè)Task的任務(wù)進(jìn)度通過(guò)RPC來(lái)匯報(bào)給TaskTracker,再由TaskTracker匯報(bào)給JobTracker。
任務(wù)結(jié)束,寫入輸出的文件到HDFS中。
MapReduce 的計(jì)算流程
先來(lái)看一張圖,系統(tǒng)地了解下 MapReduce 的運(yùn)算流程。
MapReduce的運(yùn)算流程
為了方便大家理解,重新畫了一張新的圖,演示的是關(guān)于如何進(jìn)行把一個(gè)長(zhǎng)句進(jìn)行分割,最后進(jìn)行詞頻的統(tǒng)計(jì)(已忽略掉標(biāo)點(diǎn)符號(hào))。
簡(jiǎn)單的實(shí)操例子
整個(gè)過(guò)程就是先讀取文件,接著進(jìn)行split切割,變成一個(gè)一個(gè)的詞,然后進(jìn)行 map task 任務(wù),排列出所有詞的統(tǒng)計(jì)量,接著 sorting 排序,按照字典序來(lái)排,接著就是進(jìn)行 reduce task,進(jìn)行了詞頻的匯總,最后一步就是輸出為文件。例如圖中的 spacedong 就出現(xiàn)了兩次。
其中對(duì)應(yīng)著的是 Hadoop Mapreduce 對(duì)外提供的五個(gè)可編程組件,分別是InputFormat、Mapper、Partitioner、Reduce和OutputFormat,后續(xù)的文章會(huì)詳細(xì)講解這幾個(gè)組件。
用一句話簡(jiǎn)單地總結(jié)就是,Mapreduce的運(yùn)算過(guò)程就是進(jìn)行拆解-排序-匯總,解決的就是統(tǒng)計(jì)的問(wèn)題,使用的思想就是分治的思想。
MapReduce的應(yīng)用場(chǎng)景
MapReduce 的產(chǎn)生是為了把某些大的問(wèn)題分解成小的問(wèn)題,然后解決小問(wèn)題后,大問(wèn)題也就解決了。那么一般有什么樣的場(chǎng)景會(huì)運(yùn)用到這個(gè)呢?那可多了去,簡(jiǎn)單地列舉幾個(gè)經(jīng)典的場(chǎng)景。
計(jì)算URL的訪問(wèn)頻率
搜索引擎的使用中,會(huì)遇到大量的URL的訪問(wèn),所以,可以使用 MapReduce 來(lái)進(jìn)行統(tǒng)計(jì),得出(URL,次數(shù))結(jié)果,在后續(xù)的分析中可以使用。
倒排索引
Map 函數(shù)去分析文件格式是(詞,文檔號(hào))的列表,Reduce 函數(shù)就分析這個(gè)(詞,文檔號(hào)),排序所有的文檔號(hào),輸出(詞,list(文檔號(hào))),這個(gè)就可以形成一個(gè)簡(jiǎn)單的倒排索引,是一種簡(jiǎn)單的算法跟蹤詞在文檔中的位置。
Top K 問(wèn)題
在各種的文檔分析,或者是不同的場(chǎng)景中,經(jīng)常會(huì)遇到關(guān)于 Top K 的問(wèn)題,例如輸出這篇文章的出現(xiàn)前5個(gè)最多的詞匯。這個(gè)時(shí)候也可以使用 MapReduce來(lái)進(jìn)行統(tǒng)計(jì)。
演示Demo
今天的代碼演示從Python和Java兩個(gè)版本的演示,Python版本的話便是不使用封裝的包,Java版本的話則是使用了Hadoop的封裝包。接下來(lái)便進(jìn)行演示一個(gè)MapReduce的簡(jiǎn)單使用,如何進(jìn)行詞匯統(tǒng)計(jì)。

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
-
機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-
存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-
長(zhǎng)安汽車母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-
豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-
字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-
員工持股爆雷?廣汽埃安緊急回應(yīng)
-
中國(guó)“智造”背后的「關(guān)鍵力量」
-
小米汽車研發(fā)中心重磅落地,寶馬家門口“搶人”
最新活動(dòng)更多
-
即日-9.16點(diǎn)擊進(jìn)入 >> 【限時(shí)福利】TE 2025國(guó)際物聯(lián)網(wǎng)展·深圳站
-
10月23日火熱報(bào)名中>> 2025是德科技創(chuàng)新技術(shù)峰會(huì)
-
10月23日立即報(bào)名>> Works With 開(kāi)發(fā)者大會(huì)深圳站
-
10月24日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
12月18日立即報(bào)名>> 【線下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
推薦專題
- 1 阿里首位程序員,“掃地僧”多隆已離職
- 2 先進(jìn)算力新選擇 | 2025華為算力場(chǎng)景發(fā)布會(huì)暨北京xPN伙伴大會(huì)成功舉辦
- 3 人形機(jī)器人,正狂奔在批量交付的曠野
- 4 宇樹機(jī)器人撞人事件的深度剖析:六維力傳感器如何成為人機(jī)安全的關(guān)鍵屏障
- 5 解碼特斯拉新AI芯片戰(zhàn)略 :從Dojo到AI5和AI6推理引擎
- 6 AI版“四萬(wàn)億刺激”計(jì)劃來(lái)了
- 7 騰訊 Q2 財(cái)報(bào)亮眼:AI 已成第二增長(zhǎng)曲線
- 8 2025年8月人工智能投融資觀察
- 9 10 Manus跑路,大廠掉線,只能靠DeepSeek了