Hadoop - MapReduce

  MapReduce分爲Map和Reduce,Map主要作用是做映射,Reduce是做規約。

一、MapReduce 1.x

  MR1是hadoop1.x中作爲計算和資源調度使用,含有

  • JobTracke
  • TaskTracke 作爲計算
    • map task
    • reduce task

二、MapReduce 2.x

  MR2是hadoop 2.x 上的只做計算,而資源調度使用Yarn去做,這樣可以加載更多的計算框架,不只是MR。下面這個圖,表示MR流程:
這裏寫圖片描述

2.1 Input

  MR2通過運行時的配置要讀取哪些文件,從而後面的分片做配置,MR2運行在Yarn上,Yarn會根據資源的情況,將任務優先派發到塊所在節點上。

2.2 Splitting

  分片。在進行map計算之前,mapreduce會根據輸入文件計算輸入分片(input split),每個輸入分片(input split)針對一個map任務,所以關係到Map任務數,分片至關重要。輸入分片(input split)存儲的並非數據本身,而是一個分片長度和一個記錄數據的位置的數組,輸入分片(input split)往往和hdfs的block(塊)關係很密切,假如我們設定hdfs的塊的大小是64mb,如果我們輸入有三個文件,大小分別是3mb、65mb和127mb,那麼mapreduce會把3mb文件分爲一個輸入分片(input split),65mb則是兩個輸入分片(input split)而127mb也是兩個輸入分片(input split),換句話說我們如果在map計算前做輸入分片調整,例如合併小文件。這個例子中就會有5個map任務將執行,而且每個map執行的數據大小不均,這個也是mapreduce優化計算的一個關鍵點。這不是絕對這麼分的。

2.3 Mapping

  映射。簡單的說,我們拿到這些切分的數據初始化value,這些value之後用來幹嘛。在Wordcount中,就初始化1,爲之後累加做賦值。mapred-default.xml中的mapreduce.job.maps設置一個job默認啓動的map數,但是實際設置沒什麼意義。

2.4 Shuffling

  洗牌。Shuffling是在Reduce任務中的,他的作用就是把之前Map生成的混亂數據進行清洗,就是洗牌。將key相同的放在一起(通過hash做)。爲方便後面Reduce做好鋪墊。

2.5 Reducing

  規約。就是拿到相同的keyvalue對,幹甚麼用。在Wordcount中,就是累加。一般生產上reduce數量在3-5個。mapred-default.xml中的mapreduce.job.reduces 這個參數設置默認數量,當然提交任務時候指定(推薦)也是可以的。

2.6 Final

  輸出。有多少個Reduce,就有多少個文件。

三、MapReduce 1.x 架構設計

這裏寫圖片描述
  MR1也是典型的主從架構,JobTracker即做資源的管理還要配合TaskSchedule做任務的調度。
資源管理:

  • 有多少節點
  • 各個節點的cpu資源,內存資源

任務管理:

  • 多少任務
  • 任務分配方式
  • 任性執行情況

三、MapReduce 2.x 架構設計

這裏寫圖片描述
  MR2是跑在Yarn上面,所以MR2的架構其實就是Yarn架構設計。

  • Client
  • ResourceManager節點,包含ApplicationManager(應用任務管理器)和 ResourceSchediler(資源調度器)
  • NodeManager節點,包含Container(運行任務容器)

  1. Client 提交作業job(或者稱之應用)到ResourceManager節點中的ApplicationManager。
  2. ApplicationManager 會通知一個 Nodemanger申請一個Container 容器來啓動該應用(APP)的ApplicationMaster。
  3. 啓動好的ApplicationMaster向ApplicationManager 註冊,這樣就能在web上查看運行狀態。
  4. ApplicationMaster註冊好後通過RPC向ResourceScheduler資源調度器申請和領取資源。
  5. 獲取到資源後,ApplicationMaster就向資源所在節點通訊,要求NodeManager啓動任務。
  6. NodeManger爲任務設置好容器,該容器擁有啓動該任務所需要的jar包、環境變量、運行腳本等。(這裏的任務就是MR2中的MapTask、ReduceTask)
  7. 任務定時向ApplicationMaster彙報任務運行狀態,從而讓ApplicationMaster在得知任務失敗後再去重啓或者重開一個任務。
  8. 整個作業完成後,ApplicationMaster會向ApplicationManager 申請關閉和註銷作業。

四、ResourceManager節點

4.1 ApplicationManager 應用程序管理器

  任務管理器,用於管理任務,啓動、註銷任務等。

4.2 ResourceSchediler 資源管理器

  資源的調度掐,用於調度節點資源、計算資源、內存資源等等。常見的調度器有:先進先出調度器、計算調度器、公平調度器等。

五、NodeManager節點

5.1 Container 容器

  Container容器是用來運行job的小房間,這個小房間獨享自己的資源。生產上Container容器一般佔用一臺物理機的內存和cpu核數的75%-85%之間。

NodeManager上配置Container參數
1、yarn.nodemanager.resource.memory-mb   
告訴yarn可用這臺物理機上多少資源 一般 = 實際內存*0.8
2、yarn.scheduler.minimum-allocation-mb  
一個容器最小能使用內存  生產上一般設置1G,
涉及到任務所需要的內存大於容器能提供的內存,作業可能會掛。
3、yarn.scheduler.maximum-allocation-mb
一個容器最大能使用內存  涉及到你想要容器的數量(並行度,實現性) 生產上16G
4、yarn.scheduler.minimum-allocation-vcores  
同理虛擬的核數,虛擬的核數是物理核數*2
5、yarn.scheduler.maximum-allocation-vcores
同理虛擬的核數

六、Yarn資源調度器

  調度器的意思就是ResourceManager將某個NodeManager上的資源分配給任務,保證資源的獨佔性。

6.1 先進先出調度器(FIFO)

  該調度器是最簡單,不需要任何的配置,FIFO吧應用按提交的先後順序排成隊列,先來得先分配資源,待應用需求滿足後再給下一個分配。不適用共享計算集羣。

6.2 計算調度器(CapacityScheduler)

  該調度器有隊列,不同隊列會佔有一定的獨立的集羣資源。不同任務來,會分配到不同隊列中,相互獨立。

6.3 公平調度器(FairScheduler)

  該調度器不像計算調度器那樣佔着資源。這個意思是,在某個任務正在運行後如果釋放一小部分資源,則這部分會被下一個任務使用,從而不會被浪費。

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