1.MapReduce入門(連載)

第1章 MapReduce入門

1.1 MapReduce定義

在這裏插入圖片描述
毫不誇張的說mapreduce是數據分析的鼻祖框架,其實我們學習,並不是說要學會它怎麼用,而是要去懂它的一個編程思想,恰恰如此,我們的mapreduce就是這種分佈式計算思想的一個體現.
Mapreduce是一個分佈式運算程序的編程框架,是用戶開發“基於hadoop的數據分析應用”的核心框架.
Mapreduce核心功能是將用戶編寫的業務邏輯代碼和自帶默認組件整合成一個完整的分佈式運算程序,併發運行在一個hadoop集羣上。
框架是一個半成品

1.2 MapReduce優缺點

1.2.1 優點

1.MapReduce 易於編程
它簡單的實現一些接口,就可以完成一個分佈式程序,這個分佈式程序可以分佈到大量廉價的PC機器上運行。就是因爲這個特點使得MapReduce編程變得非常流行。
2.良好的擴展性
當你的計算資源不能得到滿足的時候,你可以通過簡單的增加機器來擴展它的計算能力。
3.高容錯性
MapReduce設計的初衷就是使程序能夠部署在廉價的PC機器上,這就要求它具有很高的容錯性。比如其中一臺機器掛了,它可以把上面的計算任務轉移到另外一個節點上運行,不至於這個任務運行失敗,而且這個過程不需要人工參與,而完全是由Hadoop內部完成的。
4.適合PB級以上海量數據的離線處理
它適合離線處理而不適合在線處理。比如像毫秒級別的返回一個結果,MapReduce很難做到。

1.2.2 缺點

MapReduce不擅長做實時計算、流式計算、DAG(有向圖)計算。

  1. 實時計算
    MapReduce無法像Mysql一樣,在毫秒或者秒級內返回結果。
  2. 流式計算
  3. 流式計算的輸入數據是動態的,而MapReduce的輸入數據集是靜態的,不能動態變化。這是因爲MapReduce自身的設計特點決定了數據源必須是靜態的。 溫度 溼度 距離 攝像頭產生的數據都是實時的,都是動態的,這些mapreduce無法處理。
  4. DAG(有向圖)計算
    多個應用程序存在依賴關係,後一個應用程序的輸入爲前一個的輸出。在這種情況下,MapReduce並不是不能做,而是使用後,每個MapReduce作業的輸出結果都會寫入到磁盤,會造成大量的磁盤IO,導致性能非常的低下。

1.3 MapReduce核心思想

MapReduce核心編程思想,如圖所示
在這裏插入圖片描述
塊是存儲的概念,塊大小默認是128M,物理層面上的切
切片是取的概念,切片大小默認是128M 邏輯上的 0-128 第一片 128-200第二片

1)分佈式的運算程序往往需要分成至少2個階段。
2)第一個階段的maptask併發實例,完全並行運行,互不相干。
3)第二個階段的reduce task併發實例互不相干,但是他們的數據依賴於上一個階段的所有maptask併發實例的輸出。
4)MapReduce編程模型只能包含一個map階段和一個reduce階段,如果用戶的業務邏輯非常複雜,那就只能多個mapreduce程序,串行運行。

1.4 MapReduce進程(MR)

一個完整的mapreduce程序在分佈式運行時有三類實例進程:
1)MrAppMaster:負責整個程序的過程調度及狀態協調。
2)MapTask:負責map階段的整個數據處理流程。
3)ReduceTask:負責reduce階段的整個數據處理流程。

1.5 MapReduce編程規範(八股文)

用戶編寫的程序分成三個部分:Mapper、Reducer和Driver。
1.Mapper階段
(1)用戶自定義的Mapper要繼承自己的父類
(2)Mapper的輸入數據是KV對的形式(KV的類型可自定義)
(3)Mapper中的業務邏輯寫在map()方法中
(4)Mapper的輸出數據是KV對的形式(KV的類型可自定義)
(5)map()方法(maptask進程)對每一個<K,V>調用一次
2.Reducer階段
(1)用戶自定義的Reducer要繼承自己的父類
(2)Reducer的輸入數據類型對應Mapper的輸出數據類型,也是KV
(3)Reducer的業務邏輯寫在reduce()方法中
(4)Reducetask進程對每一組相同k的<k,v>組調用一次reduce()方法
3.Driver階段(關聯Mapper和Reducer,並且提交任務到集羣)
相當於yarn集羣的客戶端,用於提交我們整個程序到yarn集羣,提交的是封裝了mapreduce程序相關運行參數的job對象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章