天天看點

MapReduce經典簡答題

MapReduce核心思想

map負責切分,reduce負責合并(先分後合,分而治之)      

如何了解偏移量

每行的行首到首行行首的距離      

Suffle包含哪些步驟

分區(partition)------->排序(sort)------->資料優化計算(combine)------->分組(group)      

MR從讀取資料開始到将最終結果寫入HDFS經過哪些步驟

第一步:inputformat  資料讀取
           ↓
           ↓
第二步:split 将擷取的資料進行邏輯切分
           ↓
           ↓
第三步: recordReader(将資料以\n切分,進行再次切分,并輸出key(行首字母的偏移量),value(一行的資料))
           ↓
           ↓
第四步: Map接收key(行首字母偏移量),value(一行的資料),根據業務需求編寫代碼,輸出(key,value  的list)
           ↓
           ↓
     輸出給Shuffle(partition)
           ↓
           ↓
     shffle(核心機制: 資料分區,排序,分組,ComBine,合并等過程)輸出key     value的list
           ↓
           ↓
第五步:partition :按照一定的規則對key,value 的 list 進行分區
輸出給Shuffle(sort)
           ↓
           ↓
第六步:Sort :對每個分區内的資料進行排序。
輸出給Shuffle(combiner)
           ↓
           ↓
第七步: Combiner: 在Map端進行局部聚合(彙總)
目的是為了減少網絡帶寬的開銷
輸出給Shuffle(group)
           ↓
           ↓
第八步: Group: 将相同key的key提取出來作為唯一的key,将相同key 對應的value 提取出來組裝成一個value 的List
輸出給Shuffle(reduce)
           ↓
           ↓
第九步: Reduce:根據業務需求對傳入的資料進行彙總計算
輸出給Shuffle(outputFormat)
           ↓
           ↓
第十步: outputFormat:将最終的結果的寫入到HDFS      

如何設定ReduceTask的數量

job.setNumReduceTasks(個數);      

Combiner的作用

Map結束後,在Map端進行局部聚和。作用:較少網絡傳出次數,降低了網絡帶寬開銷。      

combiner運作在MapReduce的哪一端?

Map端。在Map端中shuffle中。      

Maptask的數量是可以人為設定的嗎?

不可以      

Shuffle階段的Partition分區算法是什麼

對map輸出的key 取哈希值,用這個哈希值與reducetask的個數值取餘。
餘幾,就将這個key,value放在對應的分區編号裡(分區有多個編号)。      

Split邏輯切分資料,節分大小是多大?

128M      

記憶體角度介紹Map的輸出到Reduce的輸入的過程。

`Map的輸出到記憶體`
     Map将資料傳入環形緩沖區(預設100MB 可修改),環形緩沖區中的資料到達一定的門檻值時(預設0.8 可修改)進行溢寫生成好多臨
時檔案,多個臨時檔案到達一定數量進行merge合并成一個大檔案。

`Reduce資料讀取`
     reduce會主動去發起拷貝線程到maptask擷取屬于自己的資料,資料會進入ReduceTask中的環形緩沖區,當緩沖區中的資料量到達
一定門檻值進行溢寫,多個臨時檔案merge合并成一個大檔案,最後輸入到Reduce。      

最優的Map效率是什麼?

Map端的最高效率是:盡量減少環形緩沖區flush的次數(減少磁盤IO 的使用次數)
      增加環形緩沖區記憶體
      将門檻值上調
      壓縮map輸出的資料大小(消耗cpu)      

最優的reduce是什麼?

Reduce端的最高效率是:盡量減少環形緩沖區flush的次數
      盡量将資料放在記憶體上進行計算      

在MR階段,有哪些可以優化的點?

1、加大環形緩沖區的記憶體
    2、增大緩沖區門檻值的大小 (考慮剩餘的空間是不是夠系統使用)
    3、對輸出的進行壓縮(壓縮-解壓的過程會消耗CPU)      

叢集優化的核心思路是什麼?

在網絡帶寬、磁盤IO是瓶頸的前提下 
      能不使用IO 網絡就不使用,在必須使用的前提下,能少用就少用。
      所有的,隻要能夠減少網絡帶寬的開銷,隻要能夠減少磁盤io的使用的次數的配置項,都是叢集調優的可選項。
      (可選項包括: 軟體層面【系統軟體和叢集軟體】,硬體層面,網絡層面)      

繼續閱讀