MapReduce原理與實現


課程鏈接:Hadoop大數據平台架構與實踐--基礎篇

1.MapReduce原理

分而治之,一個大任務分成多個小的子任務(map),並行執行后,合並結果(reduce)

問題1:1000副撲克牌少哪一張牌(去掉大小王)

 

問題2:100GB的網站訪問日志文件,找出訪問次數最多的IP地址

  1. 將日志進行切分(比如按時間)
  2. 各自統計各IP的訪問次數
  3. 進行歸約,通過IP值進行Hash映射(相同IP歸到同一個reduce)
  4. 排序結果

 

2.MapReduce的運行流程

基本概念

  • Job & Task
    • 一個Job是一個任務(作業),每個Job可分為多個Task,Task分為MapTask和ReduceTask
  • JobTracker(master管理節點)
    • 作業調度(先到先服務、公平調度器)
    • 分配任務、監控任務執行進度(TaskTracker需要給出狀態更新)
    • 監控TaskTracker狀態(是否出現故障)
  • TaskTacker
    • 執行任務
    • 匯報任務狀態

 

  1. 客戶端提交Job,JobTracker將其置於候選隊列
  2. JobTracker在適當的時候進行調度,選擇一個Job,將其拆分多個Map任務和Reduce任務,分發給TaskTracker來做
  3. 在實際的部署中,TaskTracker和HDFS中的DataNode是同一種物理結點(這樣可保證計算跟着數據走,讀取數據的開銷最小,移動計算代替移動數據)

  1. 任何Job過來都是先交到JobTracker里,采用一定調度策略分配Map任務和Reduce任務(可多輪)
  2. 輸入數據進行分片,按照一定規則分給TaskTracker,分配Map任務
  3. 任務好了之后,產生中間結果(Key-Value對)
  4. (Key-Value對)根據一些映射規則進行交換,再到Reduce端進行Reduce任務
  5. 運算完之后,數據結果寫回到HDFS中

MapReduce的容錯機制

  1. 重復執行(Job、硬件或者數據問題)(重復4次還是失敗以后放棄執行)
  2. 推測執行(某個結點算的特別慢會再找一個TaskTracker做同樣的事情,誰先算完終止另一個)(保證不會因為某一兩個TaskTracker的故障導致效率很低)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM