一 產生背景
運維成本:
如果采用“一個框架一個集群”的模式,則可能需要多個管理員管理這些集群;進而增加運維成本,而共享模式通常需要少數管理員即可完成多個框架的統一管理。
數據共享:
隨著數據量的暴增,跨集群間的數據移動不僅需花費更長的時間,且硬件成本也會大大增加,而共享集群模式可讓多種框架共享數據和硬件資源,將大大減小數據移動帶來的成本。
MR v1版本的缺陷:
擴展性受限制,單點故障,不支持其他分布式計算框架.
二 YARN 的由來
Yet Another Resource Negotiagor:又一個計算框架
Hadoop2.x 中發布
它是統一的集群資源管理框架,用來負責集群的管理和調度.
Paste_Image.png
三 YARN基本框架
Paste_Image.png
-
Resource Manager
整個集群只有一個,負責集群資源的統一管理和調度:
詳細功能:- 處理客戶端請求
- 啟動/監控ApplicationMaster
- 監控NodeManager
- 資源分配與調度
-
Node Manager
每個節點只有一個,負責資源的管理和使用
詳細功能:- 單個節點上的資源管理和任務管理
- 處理來自ResourceManager的命令
- 處理來自ApplicationMaster的命令
-
ApplicationMaster
每個應用程序只有一個,負責應用程序的管理和任務調度
詳細功能:- 數據切分
- 為應用程序申請資源,進一步分配給內部任務
- 任務監控和容錯
-
Container
對任務運行環境的抽象
描述一系列信息:- 任務運行資源(節點,cpu,內存)
- 任務啟動命令
- 任務運行環境
四. YARN運行過程剖析
Paste_Image.png
-
YARN 容錯性
- Resource Manager
基于zookeeper實現HA(HADOOP2.6+) - Node Manager
失敗后,RM將失敗以后任務告訴對于AM
AM 決定如何處理失敗任務. - Application Master
失敗后,由RM負責重啟。
AM需處理內部任務的容錯問題。
hadoop已經實現了內部容錯,spark的話就需要重頭開始跑.
RMAppMaster會保存已經運行完成的task,重啟后無需重新運行.
- Resource Manager
-
YARN 調度框架
- 雙層調度框架
RM將資源分配給AM
AM將資源進一步分配給Task - 基于資源預留的調度策略
資源不夠時,會為Task預留,直到資源充足。
- 雙層調度框架
Paste_Image.png
-
YARN資源調度器
- 多類型資源調度
支持cpu,內存調度 - 提供多種資源調度器
FIFO
Fair Scheduler
Capacity Scheduler - 多租戶資源調度器
支持資源按照比例分配
支持層級隊列劃分方式
支持資源搶占
- 多類型資源調度
-
YARN 資源隔離方案
- 支持內存和cpu兩種資源隔離
內存是一種“決定生死”的資源
CPU是一種“影響快慢”的資源 - 內存隔離
基于線程監控方案
基于Cgroups方案 - CPU隔離
默認不對cpu資源進行隔離
基于Cgroups隔離方案
- 支持內存和cpu兩種資源隔離
五. YARN資源調度過程
Paste_Image.png
-
調度方法:
-
FIFO
- 將所有應用程序放到一個隊列中
- 隊列前面的程序優先獲得資源
- 局限性明顯
資源利用率不高,無法交叉運行作業
不夠靈活,比如緊急作業無法插隊
-
多隊列組織方式
- 將所有應用程序放到多個隊列
- 每個隊列可單獨實現調度策略
- 每個隊列對應一定比如的調度資源
優勢明顯:- 按隊列組織資源和用戶,符合生產需求
- 不同隊列的資源分配策略不同,更加靈活
兩種多隊列調度器: Fair, Capacity
-
Capacity Scheduler
- 由Yahoo開源,共享資源調度器
- 每個隊列內部采用FIFO調度策略
- 每個隊列分配一定比例資源
- 可限制每個用戶的資源使用量
-
Paste_Image.png
- Fair Scheduler
- 由Facebook開源共享集群調度器
- 以隊列方式組織作業
- 基于最小資源量與公平共享量進行調度
- 作業優先級越高,分配的資源越多
Paste_Image.png
-
基于標簽的調度機制
- YARN 基于標簽的調度
- 基于hadoop2.6.0開始,提供基于標簽的調度策略
- 常用于異構集群(操作系統不同,安裝的版本不同,硬件不同)
- 思路
- 將一些高配機器打上highmemory/highdisk標簽,并結合隊列配置(比如reporting隊列) 使之生效。
- 將所有mapreduce程序提交到reporing隊列中
hadoop jar ***.jar -Dmapreduce.job.queuename=reporing...
- YARN 基于標簽的調度
基于標簽調度機制:原理
Paste_Image.png
Paste_Image.png
六. 運行在YARN上的計算框架
-
運行在YARN上的計算框架
- 離線計算框架 MapReduce
- DAG計算框架: Tez
- 流式計算框架: Storm
- 內存計算框架: Spark
MapReduce on YARN
Paste_Image.png
- DAG 計算框架 Tez
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
- 流式計算框架 Storm
Paste_Image.png
Paste_Image.png
Paste_Image.png
- Spark on YARN
Paste_Image.png
七. 日志分析系統架構
Paste_Image.png
-
資源管理模塊
- 資源劃分
啟用 Capacity Scheduler
劃分多個隊列,每個隊列設置一定比例資源,每個隊列交由一類應用 - 資源隔離
啟用cgroup資源隔離(linux 內核版本3.19上) - 異構集群
根據機器硬件資源不同,打上不同類型的標簽
不同隊列關聯不同的機器(標簽)
- 資源劃分
資源劃分
Paste_Image.png
-
資源劃分方法
Paste_Image.png 資源隔離配置方法
Paste_Image.png
- 節點標簽
Paste_Image.png
- 標簽調度,啟用步驟
Paste_Image.png
- Yarn 配置
Paste_Image.png
Paste_Image.png
Paste_Image.png