map reduce1.0簡析

第一代 map reduce 原理簡析。網絡

不廢話,上圖。框架

map reduce原理圖

上圖爲第一代map reduce原理圖。左側爲map階段,右側爲reduce階段。函數

map和reduce各爲一個進程。優化

先看左側map階段spa

map的數據存在於HDFS中,通過input format後,讀入緩衝區,利用溢寫機制不斷將緩衝區中的數據寫到磁盤上。當全部數據都寫到磁盤上後,會進行一次merge合併,merge期間會進行排序。所以merge後的數據是有序的數據。

下面詳細說下map各個階段:線程

  • File:原始數據文件都存於HDFS中,每一個文件切成多個必定大小(默認64M)的Block(默認有3個備份,分別存於多個節點上)。
  • InputFormat:它是MR的基礎框架之一。主要有兩個做用:數據分割split以及記錄讀取器。code

    • 數據分割split(Data Splits):它是數據的實際存儲,即物理存儲。有了它,能夠解決跨Block的問題(屬於前一個Block對應的split)。實際上,每個split均可能包含後一個Block中開頭部分的數據(即一個完整的文件大於64M時,會被分開成多個Block)。
      它主要作兩件事:①分割split;②記錄split的record(包含下一個block的開頭部分)
    • 記錄讀取器(Record Reader,即RR):它是邏輯存儲,即映射表。每讀取一條記錄,調一次map函數(RR只是單純讀記錄,文件的跨Block記錄數據存儲地址數據是在Data split記錄的)。
  • map:這個是map函數,和map進程不是一回事。若是從RR讀取到的數據是 「I love China」,那麼,通過map函數後,結果會成爲{"I",1},{"love",1},{"China",1}。也就是說,會將讀取到的數據切分,轉成{"word",1}的格式。而後將它們增長到內存中。
  • buffer in memory:內存緩衝區。它的默認大小是100M,當數據佔到80%(溢寫閾值)時,會將內存中數據轉存到磁盤上,同時還會有20%的剩餘空間,map函數還會不斷將數據寫到這20%的空間中。
  • partition:分區。它決定數據最終由哪一個reduce來處理。例如採用hash方式對key取模,最終生成{partition,key,value},就能夠知道這個key會由哪一個reduce處理。
  • sort:排序。對key進行排序,默認採用快排。
  • spill:內存緩衝區達到閾值時,溢寫的線程會鎖住這80%的緩衝區,將這些數據寫到磁盤中,而後釋放內存。每次溢寫會生成一個數據文件。
  • combiner:數據合併。將相同key的value值合併,減小輸出傳輸量。它其實是reduce函數。通常combiner會發生在溢寫過程和合並過程(網絡傳輸前)。
  • merge:將本機磁盤上的多個分區的數據文件進行合併(合併可能有屢次)。默認歸併排序。

map部分大概這麼多,咱們常說的shuffle階段,包括:partition、sort、spill、merge、combiner、copy、memory、disk...常常狀況下,進行優化的部分就是shuffle階段。orm

再看看右側reduce階段blog

  • merge:這些merge的數據來自多個map進程,不在本機的數據會經過網絡傳輸傳過來。一樣地,也會採用歸併排序。多個map task相同partition的數據會由同一個reduce處理。它的合併會由屢次。
  • reduce:最終進行彙總。一個reduce會生成一個文件。

reduce階段相對來講簡單些。排序

下面有幾個小點:

  • map reduce的過程是同步過程,只有當map執行完,才執行reduce。
  • partition的個數由指定的reduce個數決定的。(能夠是reduce個數的倍數)

在map reduce1.0中,由兩個重要進程:

  • JobTracker:主進程。

    • 它接受客戶做業,進行任務調度,提供節點監控狀態,任務進度的管理等。
    • 一個mapreduce集羣有一個jobtracker。
    • tasktracker用週期性心跳(默認3s)通知jobtracker本身的健康狀態,心跳包含可用的map和reduce任務數、佔用的數目、運行中的任務詳細信息。
    • jobtracker使用一個線程池同時處理心跳和客戶請求。
  • TaskTracker:任務進程。

    • 由jobtracker指派任務,週期心跳彙報(健康狀態、詢問任務)
    • 每個工做節點永遠只有一個tasktracker。
    • jobtracker一直等待jobclient提交做業。

mapreduce做業調度默認採用先進先出隊列調度模式(FIFO):

  • 優先級:very_high、high、normal、low、very low
相關文章
相關標籤/搜索