Cloud 學習筆記8.MapReduce調度

MapReduce Scheduling

Scheduler

  1. 並行Map任務
    • splitting and sharding data
    • Map任務相互獨立
  2. 將數據從Map傳輸到Reduce
    • 相同keyMap輸出會分配給同一個Reduce任務
    • 利用了partition函數,好比hash(key) % number_of_reducers
  3. 並行Reduce任務
    • Reduce任務相互獨立
  4. 實現存儲
    • 數據一般會有三個副本位於三個不一樣的服務器上
    • Map Input: 來自分佈式文件系統
    • Map Output: Map節點的本地磁盤(本地文件系統)
    • 中間數據對外部用戶不可見,也沒必要寫到分佈式文件系統上
    • Reduce Input: 遠程磁盤(本地文件系統)
    • Reduce Output: 分佈式文件系統

理論上,Reduce階段只能在全部Map階段結束以後啓動(未結束的Map任務可能產生新的key/value對,對應該keyReduce任務須要等待Map完成)。這種兩個階段之間的隔離操做叫作barriernode


事實上部分Reduce任務是能夠提前開始的。MapReduce中也是這樣實現的。可是這種操做不利於咱們理解MapReduce範式,因此咱們先忽略這件事。服務器

Barrier不成立的緣由之一,是在Map階段和Reduce階段之間存在Shuffle階段。Shuffle能夠和Map並行執行。app

PS.推薦兩篇文章《MapReduce:詳解Shuffle過程》《MapReduce的shuffle過程詳解(分片、分區、合併、歸併)》,對這段shuffle的梳理實在是妙。大體解釋一下:
Map任務的結果不會馬上寫入磁盤,而是寫到一個叫環形內存緩衝區的地方(這個操做叫spill)。spill的時候,會根據key進行分區(partition)。緩衝區默認最大是100M,當寫入達到閾值(默認是80%)的時候,會啓動一個線程將緩衝區文件寫到磁盤臨時文件。而這個線程會執行一個排序(sort)和一個合併(combine)操做。整個spill執行完以後,會對全部臨時文件進行歸併(merge)merge時會繼續進行sortcombine來減小最終輸出大小。
上面這段流程就是map端的shuffle操做,裏面的combine是可選的,部分狀況下其實執行的是reduce分佈式

因此,spill時首先進行partition,而後partitionsortcombine,最後寫出到磁盤。而combine能夠是reduce,因此MapReduce之間不存在Barrier函數

YARN

YARN = Yet Another Resource Negotiator. YARN是從Hadoop 2.x 開始引入的資源調度器。oop

YARN將每一個服務器當作一組容器(container)Container = some CPU + some memory。每一個容器能夠執行一個任務.net

若是服務器有4個CPU和4GB內存,而每一個容器中有一個CPU和1GB的RAM。那麼這個服務器有4個容器,能夠運行四個任務。線程

YARN有三個主要部分:code

  • Resource Manager 資源管理器 RM
    • Resource Manager是全局進程
    • 負責調度
  • Node Manager 節點管理器 NM
    • Node Manager在每一個server都有一個
    • 做爲守護進程和運行特定服務器進程(好比,任務監控)
  • Application Master 應用管理AM
    • 應用級別 per-application(job)
    • 負責containerResource ManagerNode Manager之間協商通訊
    • Node Manager通訊,檢測任務掛起和從新調度

YARN分配container

兩臺服務器A、B:每一個服務器有一個Node Manager在運行
兩個任務一、2:每一個任務有一個Application Master
全局有一個Resource Manager在運行
cdn

Timeline:

sequence environment action
0 開始時,Job2(App2)剛剛運行結束,Job1(App1)即將啓動 N/A
1 Job1(App1)即將啓動 Application Master1(AM_1)通知Resource Manager(RM) <App1即將啓動,須要分配一個container>
2 RM收到AM_1的消息,但無可分配的container RMAM_1消息放入隊列掛起,隨後Node Manager B(NM_B)RM發送消息 <container空閒>
3 RM收到NM_2的消息 RM通知AM_1, node B有空閒container
4 AM_1收到RM消息 AM_1通知NM_B執行Job1

實際運行中,每一個任務會申請多個container,Resource Manager會根據申請的順序分配container

相關文章
相關標籤/搜索