MapReduce采用了分而治之的思想用含,MapReduce主要分為兩部分矮慕,一部分是Map——分,一部分是Reduce——合
MapReduce全過程的數(shù)據(jù)都是以鍵值對的形式存在的
首先啄骇,我們假設(shè)我們有一個(gè)文件痴鳄,文件中存了以下內(nèi)容
hive spark hive hbase?
hadoop hive spark?
sqoop flume scala
這里涉及到一個(gè)偏移量(一個(gè)字符或空格為1位)?
第一行的偏移量為0,內(nèi)容為“hive spark hive hbase”?
第二行的偏移量為21缸夹,內(nèi)容為“hadoop hive spark”?
第三行的偏移量為39痪寻,內(nèi)容為“sqoop flume scala”
Map
輸入?
MapReduce處理的數(shù)據(jù)是從HDFS中讀出來的?
以偏移量為key,內(nèi)容value虽惭,則存在:?
(0橡类,“hive spark hive hbase”)?
(21,“hadoop hive spark”)?
(39芽唇,“sqoop flume scala”)
輸出?
將輸入的value中的詞以空格為分割逐個(gè)取出來做key顾画,1做value存起來?
(hive,1)?
(spark匆笤,1)?
(hive亲雪,1)?
(hbase,1)?
(hadoop疚膊,1)?
注意:有多少行义辕,Map就要循環(huán)做幾次
shuffle(之后會(huì)詳細(xì)說,這里簡單解釋)
輸入?
map的輸出
輸出?
相同的key的value進(jìn)行合并?
這里合并不是進(jìn)行累加或別的運(yùn)算寓盗,而是合并到一個(gè)集合中?
(hive灌砖,[1,1,1])?
(spark,[1,1])?
(hbase,[1])?
(hadoop傀蚌,[1])?
基显。。善炫。撩幽。。箩艺。
reduce
輸入?
shuffle的輸出
輸出?
根據(jù)業(yè)務(wù)將value進(jìn)行合并?
例如當(dāng)前的業(yè)務(wù)就會(huì)將value進(jìn)行累加
MapReduce處理數(shù)據(jù)五步走
整個(gè)MapReduce程序窜醉,所有數(shù)據(jù)以(key,value)形式流動(dòng)
第一步:input
正常情況下不需要寫代碼?
僅僅在MapReduce程序運(yùn)行的時(shí)候指定一個(gè)路徑即可
第二步:map(核心)
map(key艺谆,value榨惰,output,context)?
key:每行數(shù)據(jù)的偏移量——基本沒用?
value:每行數(shù)據(jù)的內(nèi)容——真正需要處理的內(nèi)容
第三步:shuffle
不需要寫代碼
第四步:reduce(核心)
reduce(key静汤,value琅催,output居凶,context)?
key:業(yè)務(wù)需求中的key?
value:要聚合的值
第五步:output
正常情況下不需要寫代碼?
僅僅在MapReduce程序運(yùn)行的時(shí)候指定一個(gè)路徑即可
工作原理
想學(xué)習(xí)大數(shù)據(jù)或者想學(xué)習(xí)大數(shù)據(jù)的朋友,我整理了一套大數(shù)據(jù)的學(xué)習(xí)視頻免費(fèi)分享給大家藤抡,從入門到實(shí)戰(zhàn)都有侠碧,大家可以加微信:Lxiao_28獲取,還可以入微信群交流2颉(備注領(lǐng)取資料弄兜,真實(shí)有效哦)。