好程序員大數據學習路線分享MAPREDUCE

  好程序員大數據學習路線分享MAPREDUCE,需求:統計大量的文本文件中的單詞出現的次數

  • 1)整個運算需要分階段
    • 階段一:並行局部運算
    • 階段二 :彙總處理,不同的階段需要開發不同的程序
  • 2)階段之間的調用
  • 3)業務程序(task程序)如何併發到集羣並啓動程序
  • 4)如何監控task程序的運行狀態,如何處理異常
  • ::這些問題是開發分佈式程序都會面臨的問題,完全可以封裝成框架::
    MR 的結構
  • 一個完整的MapReduce運行時有三類實例進程:
  • 1)MRAppMaster : 負責整個程序的過程調度和狀態調度
  • 2)mapTask:負責map階段的整個數據處理流程
  • 3)ReduceTask:負責reduce階段的整個數據處理流程
    MR設計框架
    ::MAPERDUCE詳細框架::
    • 1)資源如何分發? ::放到HDFS:::中不能由客戶端發送,如果配置1000臺機器,也不能做pipeline,所以,可以把jar放在HDFS中的一個目錄下。
    • 2)雖然有上千臺機器,現在job只需要20臺機器即可完成,由誰決定是哪20臺機器?::ResourceManager:: 作爲master
    • 3)worker--NODEMANAGER,執行應用程序,監控應用程序的資源使用情況(cpu,磁盤,網絡,硬盤)並且向調度器ResourceManager彙報
      好程序員大數據學習路線分享MAPREDUCE
      ::作業提交流程::
  • 1)客戶端提交作業給resourcemanager
  • 2)resourcemanager返回jobid,存儲路徑path信息
  • 3)客戶端將job.jar 、job.split(確定需要運行多少task)、job.splitinfo等資源上傳到HDFS的存儲路徑
  • 4)上傳到hdfs完成後,客戶端通知resourcemanager啓動job
  • 5)resourcemanager將job加入到job等待隊列,然後nodemanager啓動container,將資源下載到container內,向客戶端發出請求啓動master
  • 6)Appmaster向resourcemanager請求maptask的資
  • 7)resourcemanager分配資源,從hdfs下載jar到container中,master啓動maptask,通過心跳機制,檢查job.split
  • 8)maptask執行完成,通知Appmaster,釋放maptask資源。

分片機制

::如何確定需要運行多少task(並行度)::

好程序員大數據學習路線分享MAPREDUCE

  • 決定需要多大的並行度

    • map階段並行度:客戶端首先查看一下待處理數據目錄下的數據量
      /data/a.txt 1G
      /data/b.txt 800M
    • 循環遍歷:對每個文件看文件有多少個block,將block數量累加到計數器
    • 返回一任務規劃描述文件:job.split:

      • [ ] split0: /data/a.txt 0-128M
      • [ ] split1: /data/a.txtx 128-256M
        …..
      • [ ] split8: /data/b.txt 0-128M
        寫入HDFS中
    • 分片和分塊不同:
      • 分片是邏輯概念,給task一個數據處理的範圍
      • 存在冗餘(10%),偏移量和數據大小
  • 特性:移動計算(jar包中封裝的計算)而不是移動數據

編寫MR程序的步驟:
1、用戶編寫程序分爲三個部分:Mapper、Reducer、Driver
2、Mapper的輸入數據是kv對的形式(數據類型可自定義)
3、Mapper的輸出數據是kv對的形式(數據類型可自定義)
4、Mapper中的業務邏輯寫在map()方法中
5、Map()方法對每一對kv值調用一次
6、Reducer的輸入數據是kv對的形式(數據類型可自定義)
7、Reducer的輸出數據是kv對的形式(數據類型可自定義)
8、Reducer中的業務邏輯寫在reduce()方法中
9、ReduceTask進程對每一組相同的key的<k,v>調用一次reduce()方法
10、用戶自定義的Mapper、Reducer類都要繼承各自的父類
11、整個程序需要一個Driver來進行提交,提交是一個描述了各種必要信息的job對象

  • 案例:wordcount
  • 需求:有一批數據文件(TB或者PB級別的數據),如何統計這些文件中的單詞出現次數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章