MapReduce應(yīng)用案例
http://blog.csdn.net/lilianforever/article/details/51871944
1.統(tǒng)計(jì)文件中單詞的頻率
2.數(shù)據(jù)去重幔摸,去掉重復(fù)出現(xiàn)的數(shù)據(jù)
3.數(shù)據(jù)排序摸柄,對輸入的數(shù)據(jù)按照一定順序排列
4.單表關(guān)聯(lián),要求從給出的數(shù)據(jù)中尋找所關(guān)心的數(shù)據(jù)
http://www.cnblogs.com/shishanyuan/p/4646654.html
5.求各個(gè)部門的總工資
6.求各個(gè)部門的人數(shù)和平均工資
7.求每個(gè)部門最早進(jìn)入公司的員工姓名
8.求各個(gè)城市的員工的總工資
9.列出工資比上司高的員工姓名及其工資
10.列出工資比公司平均工資要高的員工姓名及其工資
11.列出名字以J開頭的員工姓名及其所屬部門名稱
12.列出工資最高的頭三名員工姓名及其工資
13.將全體員工按照總收入(工資+提成)從高到低排列
首先給出一個(gè)問題:如何實(shí)現(xiàn)多個(gè)文件的詞頻統(tǒng)計(jì)既忆?
- 方法一:在單機(jī)上驱负,順序遍歷所有文件,統(tǒng)計(jì)每個(gè)單詞出現(xiàn)的次數(shù)患雇。
- 方法二:為了加快處理速度跃脊,在單機(jī)上,并行處理程序:將任務(wù)等大小劃分給不同線程苛吱,每個(gè)線程處理自己的任務(wù)酪术,最后合并各個(gè)獨(dú)立進(jìn)程的運(yùn)行結(jié)果,再進(jìn)行處理翠储。
- 方法三:有個(gè)單個(gè)機(jī)器處理能力有限绘雁,所以有第三種方法:利用Hadoop的多個(gè)機(jī)器并行處理優(yōu)勢,即MapReduce彰亥。
一咧七、MapReduce介紹
MapReduce是一種用來處理數(shù)據(jù)的編程模型,它的優(yōu)勢在于處理大規(guī)模數(shù)據(jù)集任斋。MapReduce任務(wù)分為兩個(gè)階段:map階段和reduce階段继阻。每個(gè)階段都以鍵值對<key,value>作為輸入和輸出耻涛。作為開發(fā)者,需要寫兩個(gè)函數(shù):map函數(shù)和reduce函數(shù)瘟檩。
MapReduce執(zhí)行流程描述:
Hadoop將MapReduce的輸入數(shù)據(jù)劃分成等長的小數(shù)據(jù)塊抹缕,稱為輸入分片(input split)。每個(gè)分片對應(yīng)一個(gè)map任務(wù)墨辛,并由該任務(wù)來運(yùn)行用戶自定義的map函數(shù)來處理分片中的每條記錄卓研。一個(gè)合理的分片大小趨向于HDFS的一個(gè)塊的大小(64M/128M/256M等),Hadoop在存儲有輸入數(shù)據(jù)的節(jié)點(diǎn)上運(yùn)行map任務(wù)睹簇,可以獲得最佳性能,也就是“數(shù)據(jù)本地化優(yōu)化”奏赘,它無需使用集群帶寬資源。map任務(wù)將其輸出寫入本地磁盤太惠,而非HDFS磨淌。
每個(gè)map任務(wù)會針對輸出進(jìn)行分區(qū)(partition),即為每個(gè)reduce任務(wù)建一個(gè)分區(qū)凿渊。每個(gè)分區(qū)有許多鍵值對,但每個(gè)鍵對應(yīng)的鍵值對記錄都在同一個(gè)分區(qū)埃脏。分區(qū)由用戶定義的partiton函數(shù)控制。
map任務(wù)和reduce任務(wù)之間的數(shù)據(jù)流稱為shuffle(混洗)彩掐,因?yàn)槊總€(gè)reduce任務(wù)的輸入來自許多map任務(wù),調(diào)整混洗參數(shù)對作業(yè)總執(zhí)行時(shí)間的影響非常大佩谷。
-
map輸出通過網(wǎng)絡(luò)傳輸發(fā)送到運(yùn)行reduce任務(wù)的節(jié)點(diǎn)旁壮,數(shù)據(jù)在reduce端合并谐檀,然后由用戶定義的reduce函數(shù)處理,reduce的輸出通常存儲在HDFS中以實(shí)現(xiàn)可靠存儲桐猬。
1.png
問題:combiner、partition溃肪、shuffle?
二音五、MapReduce工作機(jī)制
- 1.經(jīng)典的MapReduce(MapReduce 1)
- 2.YARN(MapReduce 2)