1 MapReduce概念 和 MapReduce編程模型
什么是MapReduce
MapReduce分而治之的思想
MapReduce編程分Map和Reduce階段
MapReduce編程執(zhí)行步驟
編程模型
Map(in_keyin_value)
--->(out_keyintermediate_value) list
Reduce(out_keyintermediate_value) list
--->out_value list
2 應(yīng)用MRJob編寫MapReduce代碼
mrjob 簡介
mrjob 安裝
pip install mrjob
mrjob實現(xiàn)WordCount
from mrjob.job import MRJob
class MRWordCount(MRJob):
#每一行從line中輸入
def mapper(self _ line):
for word in line.split():
yield word1
# word相同的 會走到同一個reduce
def reducer(self word counts):
yield word sum(counts)
if __name__ == __main__:
MRWordCount.run()
運行WordCount代碼
打開命令行 找到一篇文本文檔 敲如下命令:
python mr_word_count.py my_file.txt
運行MRJOB的不同方式
1、內(nèi)嵌(-r inline)方式
特點是調(diào)試方便,啟動單一進程模擬任務(wù)執(zhí)行狀態(tài)和結(jié)果,默認(-r inline)可以省略,輸出文件使用 > output-file 或-o output-file,比如下面兩種運行方式是等價的
python word_count.py -r inline input.txt > output.txt python word_count.py input.txt > output.txt
2、Hadoop(-r hadoop)方式
用于hadoop環(huán)境
python word_count.py -r hadoop hdfs:///test.txt -o hdfs:///output
支持Hadoop運行調(diào)度控制參數(shù),如:
1)指定Hadoop任務(wù)調(diào)度優(yōu)先級(VERY_HIGH|HIGH)如:--jobconf mapreduce.job.priority=VERY_HIGH。
2)Map及Reduce任務(wù)個數(shù)限制,如:--jobconf mapreduce.map.tasks=2 --jobconf mapreduce.reduce.tasks=5
3 mrjob 實現(xiàn) topN統(tǒng)計(實驗)
統(tǒng)計數(shù)據(jù)中出現(xiàn)次數(shù)最多的前n個數(shù)據(jù)
import sys
from mrjob.job import MRJobMRStep
import heapq
class TopNWords(MRJob):
def mapper(self _ line):
if line.strip() != "":
for word in line.strip().split():
yield word1
#介于mapper和reducer之間,用于臨時的將mapper輸出的數(shù)據(jù)進行統(tǒng)計
def combiner(self word counts):
yield wordsum(counts)
def reducer_sum(self word counts):
yield None(sum(counts)word)
#利用heapq將數(shù)據(jù)進行排序,將最大的2個取出
def top_n_reducer(self_word_cnts):
for cntword in heapq.nlargest(2word_cnts):
yield wordcnt
#實現(xiàn)steps方法用于指定自定義的mapper,comnbiner和reducer方法
def steps(self):
#傳入兩個step 定義了執(zhí)行的順序
return [
MRStep(mapper=self.mapper
combiner=self.combiner
reducer=self.reducer_sum)
MRStep(reducer=self.top_n_reducer)
]
def main():
TopNWords.run()
if __name__==__main__:
main()
4 MapReduce原理詳解
單機程序計算流程
輸入數(shù)據(jù)--->讀取數(shù)據(jù)--->處理數(shù)據(jù)--->寫入數(shù)據(jù)--->輸出數(shù)據(jù)
Hadoop計算流程
input data:輸入數(shù)據(jù)
InputFormat:對數(shù)據(jù)進行切分,格式化處理
map:將前面切分的數(shù)據(jù)做map處理(將數(shù)據(jù)進行分類,輸出(kv)鍵值對數(shù)據(jù))
shuffle&sort:將相同的數(shù)據(jù)放在一起,并對數(shù)據(jù)進行排序處理
reduce:將map輸出的數(shù)據(jù)進行hash計算,對每個map數(shù)據(jù)進行統(tǒng)計計算
OutputFormat:格式化輸出數(shù)據(jù)
map:將數(shù)據(jù)進行處理
buffer in memory:達到80%數(shù)據(jù)時,將數(shù)據(jù)鎖在內(nèi)存上,將這部分輸出到磁盤上
partitions:在磁盤上有很多"小的數(shù)據(jù)",將這些數(shù)據(jù)進行歸并排序。
merge on disk:將所有的"小的數(shù)據(jù)"進行合并。
reduce:不同的reduce任務(wù),會從map中對應(yīng)的任務(wù)中copy數(shù)據(jù),在reduce中同樣要進行merge操作
5 MapReduce架構(gòu)
MapReduce架構(gòu) 1.X
JobTracker:負責(zé)接收客戶作業(yè)提交,負責(zé)任務(wù)到作業(yè)節(jié)點上運行,檢查作業(yè)的狀態(tài)
TaskTracker:由JobTracker指派任務(wù),定期向JobTracker匯報狀態(tài),在每一個工作節(jié)點上永遠只會有一個TaskTracker
MapReduce2.X架構(gòu)
ResourceManager:負責(zé)資源的管理,負責(zé)提交任務(wù)到NodeManager所在的節(jié)點運行,檢查節(jié)點的狀態(tài)
NodeManager:由ResourceManager指派任務(wù),定期向ResourceManager匯報狀態(tài)
{{image.png(uploading...)}}
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/126017.html
閱讀 3514·2023-04-25 20:09
閱讀 3720·2022-06-28 19:00
閱讀 3035·2022-06-28 19:00
閱讀 3058·2022-06-28 19:00
閱讀 3132·2022-06-28 19:00
閱讀 2859·2022-06-28 19:00
閱讀 3014·2022-06-28 19:00
閱讀 2610·2022-06-28 19:00