YARN是資源管理系統(tǒng),理論上支持多種資源,目前支持CPU和內(nèi)存兩種資源 YARN產(chǎn)生背景 直接源于MRv1在幾個(gè)方面的缺陷 擴(kuò)展性受限 單點(diǎn)故障 難以支持MR之外的計(jì)算 多計(jì)算框架各自為戰(zhàn),數(shù)據(jù)共享困難 MR:離線計(jì)算框架 Storm:實(shí)時(shí)計(jì)算框架 Spark:內(nèi)存計(jì)算框架 YARN設(shè)計(jì)目標(biāo) 通用的統(tǒng)一資源管理系統(tǒng) 同時(shí)運(yùn)行長應(yīng)用程序和短應(yīng)用程序 長應(yīng)用程序 通常情況下,永不停止運(yùn)行的程序 Service、HTTP Server等 短應(yīng)用程序 短時(shí)間(秒級、分鐘級、小時(shí)級)內(nèi)會運(yùn)行結(jié)束的程序 MR job、Spark Job等 YARN基本架構(gòu) ResourceManager 整個(gè)集群只大數(shù)據(jù)培訓(xùn)有一個(gè),負(fù)責(zé)集群資源的統(tǒng)一管理和調(diào)度 詳細(xì)功能 處理客戶端請求 啟動/監(jiān)控ApplicationMaster 監(jiān)控NodeManager 資源分配與調(diào)度 NodeManager 整個(gè)集群有多個(gè),負(fù)責(zé)單節(jié)點(diǎn)資源管理和使用 詳細(xì)功能 單個(gè)節(jié)點(diǎn)上的資源管理和任務(wù)管理 處理來自ResourceManager的命令 處理來自ApplicationMaster的命令 ApplicationMaster 每個(gè)應(yīng)用有一個(gè),負(fù)責(zé)應(yīng)用程序的管理 詳細(xì)功能 數(shù)據(jù)切分 為應(yīng)用程序申請資源,并進(jìn)【關(guān)注尚硅谷,輕松學(xué)IT】一步分配給內(nèi)部任務(wù) 任務(wù)監(jiān)控與容錯(cuò) Container 對任務(wù)運(yùn)行環(huán)境的抽象 描述一系列信息 任務(wù)運(yùn)行資源(節(jié)點(diǎn)、內(nèi)存、CPU) 任務(wù)啟動命令 任務(wù)運(yùn)行環(huán)境 YARN運(yùn)行過程 YARN容錯(cuò)性 ResourceManager 存在單點(diǎn)故障; 正在基于ZooKeeper實(shí)現(xiàn)HA。 NodeManager 失敗后,RM將失敗任務(wù)告訴對應(yīng)的AM; AM決定如何處理失敗的任務(wù)。 ApplicationMaster 失敗后,由RM負(fù)責(zé)重啟; AM需處理內(nèi)部任務(wù)的容錯(cuò)問題; RMAppMaster會保存已經(jīng)運(yùn)行完成的Task,重啟后無需重新運(yùn)行。 YARN調(diào)度框架 雙層調(diào)度框架 RM將資源分配給AM AM將資源進(jìn)一步分配給各個(gè)Task 基于資源預(yù)留的調(diào)度策略 資源不夠時(shí),會為Task預(yù)留,直到資源充足 與“all or nothing”策略不同(Apache Mesos) YARN資源調(diào)度器 多類型資源調(diào)度 采用DRF算法 目前支持CPU和內(nèi)存兩種資源 提供多種資源調(diào)度器 FIFO Fair Scheduler Capacity Scheduler 多租戶資源調(diào)度器 支持資源按比例分配 支持層級隊(duì)列劃分方式 支持資源搶占 YARN資源隔離方案 支持內(nèi)存和CPU兩種資源隔離 內(nèi)存是一種“決定生死”的資源 CPU是一種“影響快慢”的資源 內(nèi)存隔離 基于線程監(jiān)控的方案 基于Cgroups的方案 CPU隔離 默認(rèn)不對CPU資源進(jìn)行隔離 基于Cgroups的方案 YARN支持的調(diào)度語義 支持的語義 請求某個(gè)特定節(jié)點(diǎn)/機(jī)架上的特定資源量 將某些節(jié)點(diǎn)加入(或移除)黑名單,不再為自己分配這些節(jié)點(diǎn)上的資源 請求歸還某些資源 不支持的語義 請求任意節(jié)點(diǎn)/機(jī)架上的特定資源量 請求一組或幾組符合某種特質(zhì)的資源 超細(xì)粒度資源 動態(tài)調(diào)整Container資源 運(yùn)行在YARN上的計(jì)算框架 (還有別的) 離線計(jì)算框架:MapReduce DAG計(jì)算框架:Tez 流式計(jì)算框架:Storm 內(nèi)存計(jì)算框架:Spark 離線計(jì)算框架:MapReduce 僅適合離線批處理 具有很好的容錯(cuò)性和擴(kuò)展性 適合簡單的批處理任務(wù) 缺點(diǎn)明顯 啟動開銷大、過多使用磁盤導(dǎo)致效率低下等 DAG計(jì)算框架:Apache Tez DAG計(jì)算:多個(gè)作業(yè)之間存在數(shù)據(jù)依賴關(guān)系,并形成一個(gè)依賴關(guān)系有向圖( Directed Acyclic Graph ),該圖的計(jì)算稱為“DAG計(jì)算” 和Mapreduce相比 Tez應(yīng)用場景 直接編寫應(yīng)用程序 Tez提供了一套通用編程接口 適合編寫有依賴關(guān)系的作業(yè) 優(yōu)化Pig、Hive等引擎 下一代Hive:Stinger 好處1:避免查詢語句轉(zhuǎn)換成過多的MapReduce作業(yè)后產(chǎn)生大量不必要的網(wǎng)絡(luò)和磁盤IO 好處2:更加智能的任務(wù)處理引擎 流式計(jì)算框架:Storm Storm on YARN(和其他如mapreduce、tez、spartk等都不同,其他計(jì)算框架的client) 內(nèi)存計(jì)算框架:Spark 已經(jīng)形成了自己的生態(tài)系統(tǒng) 轉(zhuǎn)載來源作者:IT十年 |
|