目錄 · 概況 · 原理 · 資源調度器分類 · YARN架構 · ResourceManager · NodeManager · ApplicationMaster · Container · YARN工作流程 · YARN資源調度 · 操作 · Overview · User Commands ...
目錄
· 概況
· 原理
· 資源調度器分類
· YARN架構
· YARN工作流程
· YARN資源調度
· 操作
· Overview
概況
1. YARN:Yet Another Resource Negotiator,統一資源管理調度平臺。
2. 與MRv1:脫胎於MRv1,解決了MRv1可靠性差、擴展性差、資源利用率低、無法支持異構計算資源的問題。
3. YARN與計算框架:整個Hadoop以YARN為中心,計算框架都可插拔。
原理
資源調度器分類
1. 集中調度器(Monolithic Scheduler)
a) 原理:全局只運行一個中央調度器。
b) 特點:高併發作業情況下,容易出現性能瓶頸。
c) 舉例:MRv1。
2. 雙層調度器(Two-level Scheduler)
a) 原理:中央調度器管理集群中所有資源,按照一定策略(如FIFO、Fair、Capacity、Delay、Dominant Resource Fair)將資源粗粒度地分配給個框架調度器;各框架收到資源後再根據作業特性細粒度地將資源分配給容器執行具體計算任務。
b) 特點:二級調度器大大減輕了中央調度器的負載,提升併發和資源利用率。
c) 舉例:Apache YARN、Apache Mesos。
3. 狀態共用調度器(Shared-state Scheduler)
a) 起源:Google的Omega論文。
b) 特點:不成熟。
YARN架構
1. 架構圖
2. 守護進程
名稱 |
集群中數目 |
作用 |
ResourceManager |
1 |
負責集群所有資源的統一管理和調度 |
NodeManager |
多個(至少1個) |
負責管理單計算節點、容器的生命周期管理、追蹤節點健康狀況 |
3. 架構與主要進程
ResourceManager
1. 職責:雙層調度器中的中央調度器。
2. 調度過程:當多個作業同時提交時,ResourceManager在多個競爭的作業間權衡優先順序並仲裁;資源分配後,ResourceManager不再關心應用內部資源分配和每個應用狀態。減輕了ResourceManager負荷,增強了擴展性。
3. 架構
a) YarnScheduler:基於應用程式的資源申請執行資源調度,目前能調度CPU核和記憶體,支持FIFO、Capacity、自適應、自學習、動態優先順序等調度器,相當於雙層調度器的中央調度器。
b) ApplicationManager:負責管理已提交的應用集合。應用提交後,檢查ApplicationMaster資源請求合法性,再確定沒有其他已提交的應用使用相同ID。
c) ApplicationMasterService:響應來自所有ApplicationMaster的請求,包括註冊新ApplicationMaster、接收來自任意正在結束的ApplicationMaster的終止或取消註冊請求、認證來自不同ApplicationMaster的所有請求、獲取所有來自所有運行ApplicationMaster的Container分配和釋放請求。確保任意時間任意ApplicationMaster只有一個線程可以發送請求給ResourceManager,即將來自ApplicationMaster的RPC請求串列化,實現中央調度器悲觀併發。
d) ResourceTrackerService:負責和NodeManager交互。包括響應NodeManager周期性發送的PRC請求心跳、註冊新節點、接收前面註冊節點的心跳、確保只有合法的節點可以和ResourceManager通信。
e) ClientService:負責處理來自客戶端到ResourceManager的RPC通信,有作業提交、作業終止、獲取應用程式、隊列、集群統計、用戶ACL等信息。
NodeManager
1. 職責:管理YARN集群中單計算節點。
2. 架構
a) NodeStatusUpdater:NodeManager啟動時,向ResourceManager註冊,併發送該節點的可用資源信息;接下來與ResourceManager通信時,周期性彙報新啟動的Container、正在運行的Container、狀態更新和已完成的Container信息;ResourceManager也可通過NodeStatusUpdater銷毀正在運行的Container。
b) ContainerManager:NodeManager最核心組件之一,有許多子組件構成,每個子組件負責容器管理的一部分功能,協同管理節點的所有容器。
c) RPC Server:ApplicationMaster和NodeManager間通信的唯一通道。
d) ResourceLocalizationService:負責Container所需資源本地化,按照正確的URI從HDFS下載Container所需的文件資源,如JAR文件。
e) AuxService:運行用戶通過配置附屬服務的方式擴展功能,使每個節點可定製特定框架需要的服務(hdfs-site.xml的參數“yarn.nodemanager.aux-services”)。
f) ContainerLauncher:維護一個線程池並行完成Container操作(如啟停Container)。
g) ContainerMonitor:負責監控Container資源使用量。
h) LogHandler:一個可插拔組件,用戶自定義控制Container日誌保持方式。
i) ContainerExecutor:與底層操作系統交互,安全存放Container需要的文件和目錄,進而以一種安全的方式啟動和清除Container對應的進程。
ApplicationMaster
1. ApplicationMaster:每個應用程式都有自己專屬的ApplicationMaster,不同計算框架實現也不同。
2. 職責
a) 向ResourceManager申請資源;
b) 在對應NodeManager上啟動Container來執行任務,並監控Container狀態;
c) 雙層調度器中的二級調度器。
Container
1. Container:動態資源分配單位,封裝了多維度資源,如CPU、記憶體、磁碟、網路(目前只支持CPU、記憶體)。
2. 申請:ApplicationMaster向ResourceManager申請資源時,ResourceManager返回的資源用Container表示。
3. 任務執行:每個任務只有一個Container,只能使用該資源代表的資源量。
YARN工作流程
1. 客戶端向ResourceManager提交應用。
2. ResourceManager向NodeManager發出指令,為該應用啟動一個Container,併在其中啟動ApplicationMaster。
3. ApplicationMaster向ResourceManager註冊。
4. ApplicationMaster採用輪訓方式向ResourceManager的YarnScheduler申領資源。
5. ApplicationMaster與資源對應的NodeManager通信,請求啟動計算任務。
6. NodeManager根據資源量大小、所需運行環境,在Container中啟動任務。
7. 各任務向ApplicationMaster彙報各自狀態和進度。
8. 應用運行完成後,ApplicationMaster向ResourceManager註銷並關閉自己。
YARN資源調度
1. YARN資源管理機制
a) 資源池:資源以資源池形式組織,每個資源池對應一個隊列,用戶提交作業時以“-queue”參數指定隊列。
b) 隊列:隊列以樹形方式組織,整個集群資源用root表示。未指定隊列預設使用root。
1. FIFO Scheduler:先按作業優先順序高低,再按到達時間先後選擇執行作業。
2. Capacity Scheduler
a) 原理:以隊列劃分資源,每個隊列可設定資源最低保證和最大使用上限,每個用戶可設定資源使用上限;當某隊列資源空閑時,可將剩餘資源共用給其他隊列。
b) 調度過程:先按資源使用率由小到大遍歷各子隊列,直到子隊列為葉子隊列為止,則選擇該隊列分配用戶,這樣保證選中最空閑隊列;再選擇提交時間較早的作業;接著選擇優先順序高的Container,優先順序排序方式為Node Local(本地)、Rack Local(同機架)、No Local(跨機架);最後隊列內部採用FIFO調度。
3. Fair Scheduler
a) Fair Scheduler:由Fackbook開發,與Capacity Scheduler相似。
b) 與Capacity Scheduler區別
i. 隊列內部支持多種調度策略:隊列內部可選擇FIFO、Fair和DRF調度策略。
ii. 支持資源搶占:隊列剩餘資源可共用給其他隊列,當隊列有新應用提交時,調度器強制回收。
iii. 負載均衡:基於任務數目的負載均衡,即儘可能將任務均衡分配到各節點。
iv. 提高小應用響應時間:小應用可快速獲取資源,避免餓死狀況。
操作
Overview
1. Yarn commands are invoked by the bin/yarn script. Running the yarn script without any arguments prints the description for all commands.
yarn [--config confdir] COMMAND
2. Yarn has an option parsing framework that employs parsing generic options as well as running classes.
COMMAND_OPTIONS |
Description |
--config confdir |
Overwrites the default Configuration directory. Default is ${HADOOP_PREFIX}/conf. |
COMMAND COMMAND_OPTIONS |
Various commands with their options are described in the following sections. The commands have been grouped into User Commands and Administration Commands. |
User Commands
1. jar
a) Runs a jar file. Users can bundle their Yarn code in a jar file and execute it using this command.
b) Format.
yarn jar <jar> [mainClass] args...
2. application
a) Prints application(s) report/kill application.
b) Format.
yarn application <options>
c) Options.
COMMAND_OPTIONS |
Description |
-list |
Lists applications from the RM. Supports optional use of -appTypes to filter applications based on application type, and -appStates to filter applications based on application state. |
-appStates States |
Works with -list to filter applications based on input comma-separated list of application states. The valid application state can be one of the following: ALL, NEW, NEW_SAVING, SUBMITTED, ACCEPTED, RUNNING, FINISHED, FAILED, KILLED |
-appTypes Types |
Works with -list to filter applications based on input comma-separated list of application types. |
-status ApplicationId |
Prints the status of the application. |
-kill ApplicationId |
Kills the application. |
3. node
a) Prints node report(s).
b) Format.
yarn node <options>
c) Options.
COMMAND_OPTIONS |
Description |
-list |
Lists all running nodes. Supports optional use of -states to filter nodes based on node state, and -all to list all nodes. |
-states States |
Works with -list to filter nodes based on input comma-separated list of node states. |
-all |
Works with -list to list all nodes. |
-status NodeId |
Prints the status report of the node. |
4. logs
a) Dump the container logs.
b) Format.
yarn logs -applicationId <application ID> <options>
c) Options.
COMMAND_OPTIONS |
Description |
-applicationId <application ID> |
Specifies an application id |
-appOwner AppOwner |
AppOwner (assumed to be current user if not specified) |
-containerId ContainerId |
ContainerId (must be specified if node address is specified) |
-nodeAddress NodeAddress |
NodeAddress in the format nodename:port (must be specified if container id is specified) |
5. classpath
a) Prints the class path needed to get the Hadoop jar and the required libraries.
b) Format.
yarn classpath
6. version
a) Prints the version.
b) Format.
yarn version
Administration Commands
Refers to official documentation.