大數據(三) - YARN

jopen 8年前發布 | 12K 次閱讀 分布式/云計算/大數據

YARN是資源管理系統,理論上支持多種資源,目前支持CPU和內存兩種資源


YARN產生背景

    直接源于MRv1在幾個方面的缺陷

            擴展性受限

            單點故障

            難以支持MR之外的計算

    多計算框架各自為戰,數據共享困難

            MR:離線計算框架

            Storm:實時計算框架

            Spark:內存計算框架

YARN設計目標

    通用的統一資源管理系統

        同時運行長應用程序和短應用程序

    長應用程序

        通常情況下,永不停止運行的程序

        Service、HTTP Server等

    短應用程序

        短時間(秒級、分鐘級、小時級)內會運行結束的程序

        MR job、Spark Job等

</div>

YARN基本架構



ResourceManager

整個集群只有一個,負責集群資源的統一管理和調度

詳細功能

        處理客戶端請求

        啟動/監控ApplicationMaster

        監控NodeManager

        資源分配與調度

NodeManager

整個集群有多個,負責單節點資源管理和使用

詳細功能

        單個節點上的資源管理和任務管理

        處理來自ResourceManager的命令

        處理來自ApplicationMaster的命令

ApplicationMaster

每個應用有一個,負責應用程序的管理

詳細功能

        數據切分

        為應用程序申請資源,并進一步分配給內部任務

        任務監控與容錯

Container

對任務運行環境的抽象

描述一系列信息

        任務運行資源(節點、內存、CPU)

        任務啟動命令

        任務運行環境

YARN運行過程



YARN容錯性

ResourceManager

        存在單點故障;

        正在基于ZooKeeper實現HA。

NodeManager

        失敗后,RM將失敗任務告訴對應的AM;

        AM決定如何處理失敗的任務。

ApplicationMaster

        失敗后,由RM負責重啟;

        AM需處理內部任務的容錯問題;

        RMAppMaster會保存已經運行完成的Task,重啟后無需重新運行。

YARN調度框架

    雙層調度框架

        RM將資源分配給AM

        AM將資源進一步分配給各個Task

    基于資源預留的調度策略

        資源不夠時,會為Task預留,直到資源充足

        與“all or nothing”策略不同(Apache Mesos)

YARN資源調度器

    多類型資源調度

        采用DRF算法(論文:“Dominant Resource Fairness: Fair Allocation of Multiple Resource Types”)

         目前支持CPU和內存兩種資源

    提供多種資源調度器

        FIFO

        Fair Scheduler

        Capacity Scheduler

    多租戶資源調度器

        支持資源按比例分配

        支持層級隊列劃分方式

        支持資源搶占


YARN資源隔離方案

    支持內存和CPU兩種資源隔離

        內存是一種“決定生死”的資源

        CPU是一種“影響快慢”的資源

    內存隔離

        基于線程監控的方案

        基于Cgroups的方案

    CPU隔離

        默認不對CPU資源進行隔離

        基于Cgroups的方案

YARN支持的調度語義

    支持的語義

        請求某個特定節點/機架上的特定資源量

        將某些節點加入(或移除)黑名單,不再為自己分配這些節點上的資源

        請求歸還某些資源

    不支持的語義

        請求任意節點/機架上的特定資源量

        請求一組或幾組符合某種特質的資源

        超細粒度資源

        動態調整Container資源


運行在YARN上的計算框架 (還有別的)

        離線計算框架:MapReduce

        DAG計算框架:Tez

        流式計算框架:Storm

        內存計算框架:Spark


離線計算框架:MapReduce 

    僅適合離線批處理

        具有很好的容錯性和擴展性

        適合簡單的批處理任務

    缺點明顯

        啟動開銷大、過多使用磁盤導致效率低下等


DAG計算框架:Apache Tez 

    DAG計算:多個作業之間存在數據依賴關系,并形成一個依賴關系有向圖( Directed Acyclic Graph ),該圖的計算稱為“DAG計算”

和Mapreduce相比


Tez應用場景

    直接編寫應用程序

        Tez提供了一套通用編程接口

        適合編寫有依賴關系的作業

    優化Pig、Hive等引擎

        下一代Hive:Stinger

        好處1: 避免查詢語句轉換成過多的MapReduce作業后產生大量不必要的網絡和磁盤IO

        好處2:更加智能的任務處理引擎



流式計算框架:Storm



Storm on YARN(和其他如mapreduce、tez、spartk等都不同,其他計算框架的client)



內存計算框架:Spark

    已經形成了自己的生態系統



來自: http://blog.csdn.net//matthewei6/article/details/50520719

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!