日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mapreduce原理和YARN

發布時間:2023/11/29 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mapreduce原理和YARN 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MapReduce定義

MapReduce是一種分布式計算框架,由Google公司2004年首次提出,并貢獻給Apache基金會。

MR版本

  • MapReduce 1.0,Hadoop早期版本(只支持MR模型)
  • MapReduce 2.0,Hadoop 2.X版本(引入了YARN資源調度框架后,除了支持MR,還支持其他計算模型

MR V1 執行流程

  • JobTracker一直在等待JobClient提交作業;
  • TaskTracker每隔3秒向 JobTracker發送心跳heartbeat詢問有沒有任務可做,如果有,讓其派發任務給它執行;
  • 這是一道pull過程: slave主動向master拉生意;
  • MR v2 vs MR v1 流程

    MR v2運行機制的改進,啟動了YARN

  • 增加了ResourceManager、NodeManager;
  • ResourceManager(RM), 包含:ApplicationManager、ResourceScheduler兩種功能;即把應用管理和資源調度分開;
  • NodeManager(NM)負責節點的運行,當收到任務時,啟動Container完成(map或reduce)任務;
  • ResourceManager對應于v1的JobTracker;
  • NodeManager對應于v1的TaskTracker
  • MR V2 執行流程

  • 用戶向YARN中提交應用程序,其中包括MR App Mstr程序、啟動ApplicationMaster的命令、數據等。
  • ResourceManager為該應用程序分配第一個Container,并與對應的NodeManager通信,要求它在這個Container中啟動應用程序的ApplicationMaster。
  • ApplicationMaster首先向ResourceManager注冊,這樣,用戶可以直接通過ResourceManager查看應用程序的運行狀態,然后,它將為各個任務申請資源,并監控它的運行狀態,直到運行結束,即重復步驟4~7
  • ApplicationMaster采用輪詢的方式通過RPC協議向ResourceManager申請和領取資源。
  • 一旦ApplicationMaster申請到資源后,則與對應的NodeManager通信,要求其啟動任務。
  • NodeManager為任務設置好運行環境(包括環境變量、jar包、二進制程序等)后,將任務啟動命令寫到一個腳本中,并通過運行該腳本啟動任務
  • 各個任務通過某個RPC 協議向ApplicationMaster匯報自己的狀態和進度,以讓ApplicationMaster 隨時掌握各個任務的運行狀態,從而可以在任務失敗時重新啟動任務。在應用程序運行過程中,用戶可隨時通過RPC 向ApplicationMaster 查詢應用程序的當前運行狀態。
  • 應用程序運行完成后,ApplicationMaster 向ResourceManager 注銷并關閉自己。
  • Resource Container, 資源容器

    1)是集群節點將自身內存、CPU、磁盤等資源封裝在一
    起的抽象概念;

    2)調度器根據應用的資源需求和集群各個節點的資源容
    器進行調度;

    3)RM的應用管理器負責接收作業,協商獲取第一個資源
    容器用于執行應用的任務主體并為重啟失敗的應用主體分
    配容器;

    4)DN節點的應用主體負責通過協商從調度器獲取資源容
    器,并跟蹤這些容器的狀態和應用執行的情況

    Mapper任務流程


    ① 讀取輸入文件,解析成key、value對。對輸入文件的每
    一行(k1,v1),解析成多個key、value對(k2,v2)。每
    個(k1、v1)鍵值對調用一次map函數;

    ② 寫代碼邏輯將輸入的k1、v1處理成新的k2、v2輸出;

    ③ 對輸出的k2、v2進行分區(如果不指定默認1個分區,
    分區號為0);

    ④ 對不同分區的數據,按照k2進行排序、分組。相同k2的
    v2放到集合v2’
    ={v21
    ,v22
    ,v23
    ,…v2n}中;

    ⑤ (可選)分組后的數據進行歸約(combiner);

    ⑥ Mapper的結果寫入本地磁盤

    Reducer任務流程

    ① 對多個map任務的輸出,按照不同的分區,通過網絡
    復制到不同的reduce節點(取map端的結果數據);

    ② 一個Reduce任務處理一個分區數據;

    ③ 對屬于當前分區的多個map任務的輸出結果進行合并
    、排序。寫reduce函數的代碼,對輸入的k2,v2’處理
    ,轉換成新的k3、v3輸出;

    ④ 把reduce的輸出保存到文件中。文件名為 part-r- 0000N

    MapReduce核心概念

    • 不同的Map任務之間不會進行通信
    • 不同的Reduce任務之間也不會發生任何信息交換
    • 用戶不能顯式地從一臺機器向另一臺機器發送消息
    • 所有的數據交換都是通過MapReduce框架自身去實現的

    文件輸入格式InputFormat

    定義了數據文件如何分割和讀取。InputFile提供了以下一些功能

    • 選擇文件或者其它對象,用來作為輸入
    • 定義InputSplits, 將一個文件分為不同任務
    • 為RecordReader提供一個工廠,用來讀取這個文件

    例如:有一個抽象的類FileInputFormat,
    FileInputFormat從這個目錄中讀取
    所有文件,然后FileInputFormat將
    這些文件分割為多個InputSplits。

    輸入數據分塊InputSplits

    InputSplit定義了輸入到單個Map任務的輸入數據

    • 一個MapReduce程序被統稱為一個Job,可能有上百個任務構成
    • InputSplit將文件分為128MB的大小

    數據記錄讀入RecordReader

    InputSplit定義了一個數據分塊,但是沒有定義如何讀取數據記錄。RecordReader實際上定義了如何將數據記錄轉化為一個(key,value)對的詳細方法,并將數據記錄傳給Mapper類。

    例如:TextInputFormat提供了
    LineRecordReader,讀入一個文
    本行數據記錄

    Mapper

    每一個Mapper類的實例生成了一
    個Java進程,負責處理某一個
    InputSplit上的數據

    • V1中,有兩個額外參數OutputCollector以及Reporter,前者收集中間結果,后者獲得環境參數以及設當前執行的狀態。
    • 現在的版本V2用Context提供給每一個Mapper函數,用來提供上面兩個對象的功能

    Combiner

    對Map端的輸出進行合并,即合并相同key的鍵值對,以便
    減少partitioner數據通信開銷。
    可以不用指定;如果指定合并類,其性質類似于本地執行
    的一個Reducer,滿足一定的條件才能夠執行

    Partitioner & Shuffle&Sort

    • Partitioner & Shuffle
      在Map工作完成之后,每一個 Map函數的結果會被傳輸到對
      應Reducer所在的節點,此時用戶可以提供一個Partitioner
      類,用來決定一個給定的(key,value)對傳給哪個節點。

    • Sort
      傳輸到每一個Reducer節點上的、將被所有的Reduce函數接
      收到的Key,value對會被Hadoop自動排序(即Map生成的結
      果傳送到某一個節點的時候,會被自動排序)

    Shuffle

    Shuffle過程就是從map端輸出到reduce端輸入之間的過程;是Hadoop中最核心的部分!!!

    Shuffle的Map端

  • 在Map任務全部結束之前進行歸并
  • 歸并得到大的文件放在本地磁盤
  • 文件歸并時,如果溢寫文件數量大于預定值(默認是3)則可以再次啟動Combiner,少于3不需要
  • JobTracker會一直監測Map任務的執行,并通知Reduce任務來領取數據
  • Shuffle的Reduce端

  • Reduce任務通過RPC向JobTracker詢問Map任務是否已經完成,若完成,則領取數據
  • Reduce領取數據先放入緩存,來自不同Map機器,先歸并,再合并寫入磁盤
  • 多個溢寫文件歸并成一個或多個大文件,文件中的鍵值對是排序的
  • 當數據很少時,不需要溢寫到磁盤,直接在緩存中歸并,然后輸出給Reduce
  • Reducer

    做用戶定義的Reduce操作。
    編程接口是Context。
    一個分區對應一個Reducer。
    每個分區對應一個輸出文件 part-r-0000X。

    文件輸出格式OutputFormat

    寫入到HDFS的所有OutputFormat
    都繼承自FileOutputFormat
    。 每一個Reducer都寫一個文件到一
    個共同的輸出目錄,文件名是part- nnnnn,其中nnnnn是與每一個
    reducer相關的一個號(partition id)

    MapReduce-任務執行總結

  • 提交作業
  • 初始化作業
  • 分配任務
  • 執行任務
  • 更新任務執行進度和狀態
  • 推測式執行(speculative) –如果某個節點的任務執行過慢,會啟動備份任務

    YARN定義

    YARN 是Hadoop 2.0 中的資源管理系統
    ,它是一個通用的資源管理模塊,可為
    各類應用程序進行資源管理和調度。

    YARN三大組件

  • ResourceManager –處理客戶端請求
    • 啟動/監控ApplicationMaster
    • 監控NodeManager
    • 資源分配與調度
  • NodeManager –單個節點上的資源管理
    • 處理來自ResourceManager的命令
    • 處理來自ApplicationMaster的命令
  • ApplicationMaster
    • 數據切分
    • 為應用程序申請資源,并分配給內部任務
    • 任務監控與容錯

    YARN資源調度器

    • FIFO,先進先出調度器
    • Fair Scheduler,公平調度器
    • Capacity Scheduler,容量調度器

    總結

    以上是生活随笔為你收集整理的Mapreduce原理和YARN的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。