現(xiàn)在位置:主頁 > 熱文 > 【大數(shù)據(jù)知識】MapReduce運(yùn)行流程

【大數(shù)據(jù)知識】MapReduce運(yùn)行流程

作者:編輯 ? 時間:2018-11-25 ? 瀏覽:人次

MapReduce運(yùn)行流程

以wordcount為例,運(yùn)行的詳細(xì)流程圖如下

1.split階段

首先mapreduce會根據(jù)要運(yùn)行的大文件來進(jìn)行split,每個輸入分片(input split)針對一個map任務(wù),輸入分片(input split)存儲的并非數(shù)據(jù)本身,而是一個分片長度和一個記錄數(shù)據(jù)位置的數(shù)組。輸入分片(input split)往往和HDFS的block(塊)關(guān)系很密切,假如我們設(shè)定HDFS的塊的大小是64MB,我們運(yùn)行的大文件是64x10M,mapreduce會分為10個map任務(wù),每個map任務(wù)都存在于它所要計算的block(塊)的DataNode上。

2.map階段

map階段就是程序員編寫的map函數(shù)了,因此map函數(shù)效率相對好控制,而且一般map操作都是本地化操作也就是在數(shù)據(jù)存儲節(jié)點(diǎn)上進(jìn)行。本例的map函數(shù)如下:

  1. publicclassWCMapperextendsMapperLongWritable,Text,Text,IntWritable{@Override
  2. protectedvoidmap(LongWritablekey,Textvalue,Contextcontext)throwsIOException,InterruptedException{
  3. Stringstr=value.toString();
  4. String[]strs=StringUtils.split(str,'');for(Strings:strs){
  5. context.write(newText(s),newIntWritable(1));
  6. }
  7. }
  8. }

根據(jù)空格切分單詞,計數(shù)為1,生成key為單詞,value為出現(xiàn)1次的map供后續(xù)計算。

3.shuffle階段

shuffle階段主要負(fù)責(zé)將map端生成的數(shù)據(jù)傳遞給reduce端,因此shuffle分為在map端的過程和在reduce端的執(zhí)行過程。

先看map端:

  1. map首先進(jìn)行數(shù)據(jù)結(jié)果數(shù)據(jù)屬于哪個partition的判斷,其中一個partition對應(yīng)一個reduce,一般通過key.hash()%reduce個數(shù)來實(shí)現(xiàn)。
  2. 把map數(shù)據(jù)寫入到Memory Buffer(內(nèi)存緩沖區(qū)),到達(dá)80%閥值,開啟溢寫進(jìn)磁盤過程,同時進(jìn)行key排序,如果有combiner步驟,則會對相同的key做歸并處理,最終多個溢寫文件合并為一個文件。

reduce端:

reduce節(jié)點(diǎn)從各個map節(jié)點(diǎn)拉取存在磁盤上的數(shù)據(jù)放到Memory Buffer(內(nèi)存緩沖區(qū)),同理將各個map的數(shù)據(jù)進(jìn)行合并并存到磁盤,最終磁盤的數(shù)據(jù)和緩沖區(qū)剩下的20%合并傳給reduce階段。

4.reduce階段

reduce對shuffle階段傳來的數(shù)據(jù)進(jìn)行最后的整理合并

  1. publicclassWCReducerextendsReducerText,IntWritable,Text,IntWritable{@Override
  2. protectedvoidreduce(Textkey,IterableIntWritablevalues,Contextcontext)throwsIOException,InterruptedException{intsum=0;for(IntWritablei:values){
  3. sum+=i.get();
  4. }
  5. context.write(key,newIntWritable(sum));
  6. }
  7. }

MapReduce的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  1. 易于編程;
  2. 良好的擴(kuò)展性;
  3. 高容錯性;

4.適合PB級別以上的大數(shù)據(jù)的分布式離線批處理。

缺點(diǎn):

  1. 難以實(shí)時計算(MapReduce處理的是存儲在本地磁盤上的離線數(shù)據(jù))
  2. 不能流式計算(MapReduce設(shè)計處理的數(shù)據(jù)源是靜態(tài)的)
  3. 難以DAG計算MapReduce這些并行計算大都是基于非循環(huán)的數(shù)據(jù)流模型,也就是說,一次計算過程中,不同計算節(jié)點(diǎn)之間保持高度并行,這樣的數(shù)據(jù)流模型使得那些需要反復(fù)使用一個特定數(shù)據(jù)集的迭代算法無法高效地運(yùn)行。

轉(zhuǎn)載請保留原文鏈接:http://eatcooks.com/a/rewen/20181125/19591.html上一篇:上一篇:【開發(fā)大數(shù)據(jù)】關(guān)于程序員的那些事兒
下一篇:下一篇:沒有了