1. 程式人生 > >Hadoop1.x版本和Hadoop2.x版本架構原理

Hadoop1.x版本和Hadoop2.x版本架構原理

MapReduce 1.x 架構

MapReduce 1.x 採用 Master/Slave 架構,由全域性唯一的 Jobtracker 和多個 TaskTacker 組成,並且在Client中提供一系列的api供程式設計和管理使用。

1.client

提供api供使用者程式設計呼叫,將使用者編寫的MapReduce程式提交到JobTracker中。

2. JobTracker

  1. 負責資源排程 主節點 發生故障整個叢集癱瘓
  2. 負責任務排程,主節點
    存在的問題
    負載過高,容易故障
    與MR耦合度太高,如果Spark也要執行在這一框架上,需要自己去實現,這個叢集就存在兩套資源排程器,存在資源隔離問題以及資源掠奪問題。。
    全域性唯一,主要負責叢集資源監控和作業排程。JobTracker會對叢集中所有的TaskTracker進行監控,一旦TaskTracker出現宕機、失敗等情況,JobTracker中的排程器會將原來在這個TaskTracker上面執行的任務轉移到其他的節點上面繼續執行。當有新的作業進入到叢集中時,排程器會根據資源的使用情況合理的分配這些作業。並且JobTracker中的排程器是可以插拔的,這意味著使用者可以根據自己的需要,自定義作業和叢集的排程方法。但是JobTracker存在單點故障的問題,一旦JobTracker所在的機器宕機,那麼叢集就無法正常工作。

3.TaskTracker

TaskTracker使用 “slot” 對本節點的資源(cpu、記憶體、磁碟等)進行劃分,負責具體的作業執行工作。TaskTracker需要週期性向JobTracker彙報本節點的心跳資訊,包括自身執行情況、作業執行情況等,JobTracker中的排程器會根據心跳資訊對其分配“slot”,TaskTracker獲得slot之後,就開始執行相應的工作。其中 slot 有兩種: MapSlot 和 TaskSlot ,分別負責執行Map任務和Task任務,二者互不影響。

4.Task

分為兩種:Map Task 和 Reduce Task,分別執行Map任務和 Task 任務。MapReduce的輸入資料會被切分成多個 split ,一個split會交給一個Map Task去執行。

MapReduce 2.x 架構

在這裡插入圖片描述

yarn資源排程器主從架構

ResourceManager

NodeManager

YARN:Yet Another Resource Negotiator;

Hadoop 2.0新引入的資源管理系統,直接從MRv1演化而來的;
核心思想:將MRv1中JobTracker的資源管理和任務排程兩個功能分開,分別由ResourceManager和ApplicationMaster程序實現
ResourceManager:負責整個叢集的資源管理和排程
ApplicationMaster:負責應用程式相關的事務,比如任務排程、任務監控和容錯等
YARN的引入,使得多個計算框架可執行在一個叢集中
每個應用程式對應一個ApplicationMaster
目前多個計算框架可以執行在YARN上,比如MapReduce、Spark、Storm等

基本功能模組
  • YARN:負責資源管理和排程 AppMaster:負責任務切分、任務排程、任務監控和容錯等 MapTask/ReduceTask:任務單元
  • 每個MapRduce作業對應一個AppMaster AppMaster任務排程 YARN將資源分配給AppMaster AppMaster進一步將資源分配給內部的任務
  • AppMaster容錯 AppMaster失敗後,由YARN重新啟動 任務失敗後,AppMaster重新申請資源
  • 相關技術點

    ResurceManager(RM):一個純粹的排程器,專門負責叢集中可用資源的分配和管理。
    Container :分配給具體應用的資源抽象表現形式,包括記憶體、cpu、disk
    NodeManager(NM) :負責節點本地資源的管理,包括啟動應用程式的Container,監控它們的資源使用情況,並報告給RM,管理Container生命週期
    Container:節點NM,CPU,MEM,I/O大小,啟動命令,預設NM啟動執行緒監控Container大小,超出申請資源額度,kill
    支援linux的Cgroup
    App Master (ApplicationMaster(AM)):特定框架庫的一個例項,負責有RM協商資源,並和NM協調工作來執行和監控Container以及它們的資源消耗。AM也是以一個的Container身份執行。
    以作業為單位,避免單點故障,負載到不同的節點,為task申請資源(Task-Container)
    客戶端(Client):是叢集中一個能向RM提交應用的例項,並且指定了執行應用所需要的AM型別,請求資源建立AM,與AM互動

    執行過程

    1. 提交MapReduce程式,向NameNode請求要處理檔案的Block的位置資訊。
    2. 向ResourceManager申請資源,請求啟動一個ApplicationMaster。
    3. RM接收到請求後隨機選擇一臺資源充足的節點啟動Container容器
    4. NodeManager會在這個Container容器中啟動一個ApplicationMaster(任務排程器)
    5. client把請求到的資訊報表提交到AM。
    6. AM根據這些位置資訊向ResourceManager申請資源,RM接收請求選擇資源充足的節點啟動一個Container容器,並在容器中建立yarn-child程序。
    7. AM分發Map Task執行緒到各個yarn-child中執行。
    8. 在每個yarn-child所在節點,每個Map Task執行緒執行完後會都會生成一個磁碟檔案。
    9. 如果yarn-child節點資源充足,AM會優先選擇這些節點分發Reduce Task任務。
    10. 等Reduce Task執行完之後,會把結果檔案寫入HDFS。