YARN WebUI V1服務(wù)
YARN提供了一個(gè)WebUI v1服務(wù),該服務(wù)屬于內(nèi)置服務(wù),隨著RM的啟動(dòng)而啟動(dòng),V1表示這是第一代版本的WebUI服務(wù),用戶(hù)可以通過(guò)瀏覽器登陸界面,來(lái)監(jiān)控集群、隊(duì)列、應(yīng)用程序、服務(wù)、節(jié)點(diǎn)信息,還可以查看集群詳細(xì)配置的信息,檢查各種應(yīng)用程序和服務(wù)的日志
首頁(yè)
瀏覽器輸入http://RM_HOST:8088 訪(fǎng)問(wèn)YARN WebUI服務(wù),瀏覽器打開(kāi)后以列表的形式展示處于各種狀態(tài)的各種應(yīng)用程序,入MapReduce應(yīng)用程序、Spark應(yīng)用程序、Flink應(yīng)用等。
JobHistoryServer服務(wù)
在默認(rèn)情況下,YARN RM重啟之后,已完成的作業(yè)和正在執(zhí)行的作業(yè)信息都會(huì)丟失,針對(duì)正在執(zhí)行的作業(yè)恢復(fù),可以設(shè)置RM重啟機(jī)制回復(fù),如果沒(méi)有開(kāi)啟則全部丟失。JobHistoryServer(JHS)屬于YARN的一項(xiàng)系統(tǒng)服務(wù),進(jìn)存儲(chǔ)與已經(jīng)完成的MapReduce應(yīng)用程序的作業(yè)歷史信息,并不會(huì)存儲(chǔ)其他類(lèi)型(如spark、flink等)應(yīng)用程序的作業(yè)歷史信息,當(dāng)啟用JHS服務(wù)時(shí),建議開(kāi)啟日志聚合紅能,利于統(tǒng)一管理和分析日志,否則每隔Container的運(yùn)行日志是存儲(chǔ)在NodeManager節(jié)點(diǎn)本地,查看日志時(shí)需要訪(fǎng)問(wèn)各個(gè)NodeManager節(jié)點(diǎn)
配置
Step1 :mapred-site.xml 添加JHS配置
<!--jobhistory 服務(wù)配置,注意19888是web ui訪(fǎng)問(wèn)端口-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop132-father:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop132-father:19888</value>
</property>
Step2:yarn-site.xml 添加日志聚合配置
<!--開(kāi)啟yarn日志聚合功能,手機(jī)每個(gè)容器的日志 集中存儲(chǔ)在同一個(gè)地方-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--設(shè)置日志保留時(shí)間: 1天-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>hadoop132-father:19888/jobhistory/logs</value>
</property>
**step3:集群同步配置文件 **
# 我們采用scp進(jìn)行同步
scp yarn-site.xml mapred-site.xml hadoop133:$PWD
scp yarn-site.xml mapred-site.xml hadoop134:$PWD
啟動(dòng)Hadoop集群、手動(dòng)啟動(dòng)JHS服務(wù)
# 啟動(dòng)hadoop
start-all.sh
# 啟動(dòng)JHS服務(wù)
mapred -- daemon start historyserver
我們通過(guò)JPS來(lái)進(jìn)行查看
啟動(dòng)成功
我們前往相關(guān)頁(yè)面(在配置文件中有設(shè)置的信息,我設(shè)置的hadoop132-father:19888,在使用的時(shí)候根據(jù)自己在step1 的設(shè)置進(jìn)行相關(guān)的操作)
在這里可以直接進(jìn)行查看相關(guān)信息,在這里我們可以直接看到啟動(dòng)了多少個(gè)Map、多少個(gè)Reduce,以及運(yùn)行的結(jié)果:多少個(gè)運(yùn)行成功,多少個(gè)運(yùn)行失敗。
同時(shí)也可以看到在哪臺(tái)機(jī)器上運(yùn)行的,點(diǎn)擊一下可以查看更加詳細(xì)的信息:比如說(shuō)最后一次心跳是什么時(shí)候
TimelineServer服務(wù)
由于JobHistoryServer進(jìn)隊(duì)MapReduce應(yīng)用程序提供歷史信息支持,其他應(yīng)用程序的歷史信息需要分別提供單獨(dú)的HistoryServer才能查詢(xún)和檢索,例如Spark的Application需要通過(guò)Spark自己提供的HistoryServer來(lái)解決應(yīng)用歷史信息,為了解決這個(gè)問(wèn)題YARN新增了Timeline Server組件,以通用的方式存儲(chǔ)和檢索應(yīng)用程序當(dāng)前和歷史信息
,在中文語(yǔ)境下,將Timeline Server稱(chēng)之為時(shí)間軸服務(wù)
作用
- 存儲(chǔ)應(yīng)用程序的特定信息
手機(jī)和檢索指定應(yīng)用程序或者框架的某些信息,例如Hadoop的MR框架會(huì)產(chǎn)生像Map Task數(shù)量、Reduce Task數(shù)量 Counter等信息,應(yīng)用開(kāi)發(fā)人員可以通過(guò)TimelineClient,在Application Master或者Container中將特定的程序發(fā)送給Timeline服務(wù)器,同時(shí)Timeline 提供RESTAPI ,用以查詢(xún)Timeline中存儲(chǔ)的信息,并可以通過(guò)應(yīng)用程序或者框架的特定UOI進(jìn)行展示 - 保存已經(jīng)完成應(yīng)用程序的常規(guī)信息
在之前此功能只能通過(guò)JobHistoryServer 實(shí)現(xiàn),并且僅支持MR Job,隨著Timeline服務(wù)出現(xiàn),JobHistoryServerv的功能看成了Timeline的一部分
YARN操作維護(hù)命令
USER用戶(hù)命令
application
使用方法
yarn application [options]
可以直接使用 --help選項(xiàng)查看幫助文檔
常用選項(xiàng)
# 查看所有的application 僅顯示狀態(tài)為SUBMITTED ACCEPTED RUNNING 應(yīng)用
yarn application -list
# 查看狀態(tài)為ALL的application 列表
yarn application -list -appStates ALL
# 殺死某個(gè)Application
yarn application -kill Application-ID
#查看某個(gè)Application的統(tǒng)計(jì)報(bào)告
yarn application -status Application-Id
# 查看類(lèi)型為MAPREDUCE 的Application列表
yarn application -list -appTypes MAPREDUCE
# 移動(dòng)一個(gè)Application 到default隊(duì)列中
yarn application -movetoqueue Application-ID -toqueue default
#移動(dòng)一個(gè)Application 到優(yōu)先隊(duì)列中
yarn application -updatePriority 優(yōu)先級(jí) -appId Application-ID
jar
這個(gè)方法經(jīng)常使用,我們通常運(yùn)行jar 包都是通過(guò)這條命令運(yùn)行的
yarn jar xxx.jar [mainClass] args
通常在${HADOOP_HOME}$/share/hadoop/mapreduce
下官方放置了一些可供測(cè)試的jar包
applicationattempt
使用方法
yarn applicationattempt [options]
applicationattempt可以理解為一個(gè)app應(yīng)用內(nèi)部的一次嘗試執(zhí)行過(guò)程,
相關(guān)操作
#標(biāo)記某一次applicationattempt 失敗
yarn applicationattempt -fail Appattempt-ID
# 查看某個(gè)應(yīng)用所有的attempt
yarn applicationattempt -list Application-ID
# 查看具體某一個(gè)applicationattempt 的報(bào)告
yarn applicationattempt -status Appattempt-ID
container
使用方式
yarn container [options]
可以根據(jù)attemptID操作作業(yè)的Container相關(guān)信息
常用操作
# 列出指定attemptID所有的container信息
#attemptID可以從RM web UI或者時(shí)間軸服務(wù)[Timeline Server]上獲取
yarn container -list Application_Attempt-ID
# 打印容器的狀態(tài)
yarn container -status Container-ID
logs
使用方法
#日志相關(guān)操作命令
yarn logs -applicationId ApplicationID [options]
常用命令
#查看應(yīng)用程序所有的logs 此操作需要慎重 顯示內(nèi)容比較多
yarn logs -applicationId ApplicationID
# 置頂顯示內(nèi)容大小
yarn logs -applicationId ApplicationID -size size
# 查看應(yīng)用程序某個(gè)container運(yùn)行所在的節(jié)點(diǎn)的log
yarn logs -applicationId ApplicationID -containerId containerId
queue
使用方式
# 隊(duì)列相關(guān)的操作命令
yarn queue [options]
常用命令
#查看某個(gè)queue 的狀態(tài),
yarn queue -status queue-name
node
使用方法
# 集群節(jié)點(diǎn)操作命令
yarn node [options]
常用的相關(guān)操作
#查看yarn所有從節(jié)點(diǎn)
yarn node -list -all
# 查看所有 正在運(yùn)行的節(jié)點(diǎn)
yarn node -list -states RUNNING
# 查看yarn所有節(jié)點(diǎn)的詳細(xì)
yarn node -list showDetails
#查看yarn某個(gè)節(jié)點(diǎn)的報(bào)告
yarn node -status 節(jié)點(diǎn)
version
查看版本號(hào)
yarn version
Admin 管理命令
resourcemanager | nodemanager
使用方法
# 針對(duì)RM的操作命令
yarn resourcemanager [optinons]
常用操作
# 啟動(dòng)某個(gè)節(jié)點(diǎn)的resourcemanager
yan resourcemanager
# 啟動(dòng)某個(gè)節(jié)點(diǎn)的nodemanager
yarn nodemanager
#格式化resourcemanager的RMStateStore
yarn resourcemanager -format-state-stroe
# 刪除RMStateStore的Application
yarn resoucemanager -remove-application-from-state-stroe ApplicationID
proxyserver
使用方式
#啟動(dòng)某個(gè)節(jié)點(diǎn)的proxyserver,使用代理的原因是為了減少通過(guò)YARN進(jìn)行基于Web的攻擊的可能性
yarn proxyserver
YARN Proxy Server 服務(wù)需要提前配置
<property>
<name>yarn.web-proxy.address</name>
<value>hadoop132-father:8089</value>
</property>
daemonlog
使用方法
yarn daemonlog -getlevel <host:httpport> <classname>
yarn daemonlog -setlevel <host:httpport> <level>
常用命令
# 查看幫助
yarn daemonlog
#查看RMApplmpl的日志級(jí)別
yarn daemonlog -getlevel hadoop132-father:8088 0rg.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApplmpl
rmadmin
使用方式
# 這個(gè)命令比較重要 使用的也比較多
yarn rmadmin [options]
常用命令
# 重新加載mapred-queues 配置文件
yarn rmadmin -refreshQueues
#刷新ResouceManager的主機(jī)信息
yarn rmadmin -refreshNodes
# 在Resourcemanager上刷新NodeManager的資源
yarn readmin -refreshNodesResources
# 刷新超級(jí)用戶(hù)代理組映射
yarn readmin -refreshSuperUserGroupsConfiguration
# 刷新ACL以管理ResourceManager
yarn readmin -refreshAdminAcls
#獲取Resourcemanager服務(wù)的Active/standby狀態(tài)
yarn rmadmin -getAllServiceState
# ResourceManager服務(wù)執(zhí)行健康檢查,如果檢查失敗RMAdmin工具將使用非零退出碼退出
yarn rmadmin -checkHealth rm1
rarn rmadmin -checkHealth rm2
timelineserver
使用方式
# 啟動(dòng)時(shí)間軸服務(wù) 通常使用第二條進(jìn)行啟動(dòng)
yarn timelineserver
yarn-daemon.sh start timelineserver
時(shí)間軸服務(wù)Web UI 端口 8188
scmadmin
使用方法
# scmadmin 是ShareCacheManager (共享緩存管理)的管理客戶(hù)端
yarn scmadmin
常用命令
# 執(zhí)行清理任務(wù)
yarn scmadmin -runCleanerTask
#先啟動(dòng)SCM服務(wù)
yarn-daemon.sh start sharecachemanager
YARN 資源管理與隔離
在YARN中資源管理由ResourceManager和NodeManager共同完成,其中ResouceManager中的調(diào)度器負(fù)責(zé)資源的分配,而NodeManager負(fù)責(zé)資源的供給與隔離。
資源調(diào)度分配:ResourceManager將某個(gè)NodeManager上資源分配給任務(wù)
資源隔離:NodeManager按照需求為任務(wù)提供相應(yīng)的資源,甚至保證這些資源具有獨(dú)占性,為任務(wù)運(yùn)行提供基礎(chǔ)的保證
Hadoop YARN同時(shí)支持內(nèi)存和CPU兩種資源的調(diào)度
,內(nèi)存資源的多多少少會(huì)決定任務(wù)的生死,如果內(nèi)存不夠,任務(wù)可能會(huì)運(yùn)行失敗,相比之下CPU資源則不同,他只會(huì)決定任務(wù)運(yùn)行的快慢,不會(huì)對(duì)生死產(chǎn)生影響
Memory內(nèi)存資源
YARN允許用戶(hù)配置每個(gè)節(jié)點(diǎn)上課用的物理內(nèi)存資源;這里是“可用的”,因?yàn)橐粋€(gè)節(jié)點(diǎn)上的內(nèi)存會(huì)被若干個(gè)服務(wù)共享,比如說(shuō)一部分分給YARN,一部分分給HDFS,一部分分給HBase,YARN配置的只是自己可以使用的
配置核心參數(shù)
- yarn.nodemanager.resource.memory-mb
該節(jié)點(diǎn)上YARN可以使用的物理內(nèi)存總量,默認(rèn)為8192MB
如果設(shè)置為-1,并且yarn.nodemanager.resource。detect-hardware-capabilities 為true時(shí)將會(huì)自動(dòng)計(jì)算操作系統(tǒng)內(nèi)存進(jìn)行設(shè)置 - yarn.nodemanager.vmem-pmem-ratio
任務(wù)每使用1MB物理內(nèi)存,最多可以使用虛擬內(nèi)存量,默認(rèn)為2.1 - yarn.nodemanager.peme-check-enabled
是否啟動(dòng)一個(gè)線(xiàn)程檢查每個(gè)任務(wù)正在使用的物理內(nèi)存量,如果任務(wù)超出分配值,則直接將其殺掉,默認(rèn)為true - yarn nodemanager.veme-check-enable
是否啟動(dòng)一個(gè)線(xiàn)程檢查每個(gè)任務(wù)正在使用的虛擬內(nèi)存量,如果任務(wù)超出分配值,則直接將其殺掉,默認(rèn)為true - yarn.scheduler.minimum-allocation-mb
單個(gè)任務(wù)可以申請(qǐng)的最少物理內(nèi)存量,默認(rèn)為1024MB,如果一個(gè)任務(wù)申請(qǐng)的物理內(nèi)存量少于該值,則該對(duì)應(yīng)的值改為這個(gè)數(shù) - yarn.scheduler.maximum-allocation-mb
單個(gè)任務(wù)可以申請(qǐng)的最多物理內(nèi)存量 最多為8192MB
在默認(rèn)情況下,YARN采用了線(xiàn)程監(jiān)控
的方法判斷任務(wù)是否超量使用內(nèi)存,一旦發(fā)現(xiàn)超量,則直接將其殺死,對(duì)于Cgroups對(duì)內(nèi)存的控制缺乏靈活性(即任務(wù)任何時(shí)刻不能超出內(nèi)存上線(xiàn),如果超過(guò),則直接將其殺死或者報(bào)OOM),而Java進(jìn)程在創(chuàng)建瞬間內(nèi)存將翻倍,之后驟降到正常值,采用線(xiàn)程監(jiān)控的方式更加靈活(當(dāng)發(fā)現(xiàn)內(nèi)存樹(shù)內(nèi)存瞬間翻倍超過(guò)設(shè)定值時(shí),可認(rèn)為是正?,F(xiàn)象,不會(huì)將任務(wù)殺死),因此YARN未提供Cgroups內(nèi)存隔離機(jī)制
CPU資源
在YARN中CPU資源的組織方式人在探索中,之前只是非常粗粒度的實(shí)現(xiàn)方式。
CPU被劃分為虛擬CPU,此處的虛擬CPU時(shí)YARN自己引入的概念,初衷是考慮到不同節(jié)點(diǎn)的CPU性能可能不同,每個(gè)CPU具有的計(jì)算能力也是不一樣的,比如說(shuō)某個(gè)物理CPU的計(jì)算能力可能是另一個(gè)的2倍,此時(shí)可以通過(guò)為第一個(gè)物理CPU多配置幾個(gè)虛擬CPU來(lái)彌補(bǔ)這個(gè)差異。
用戶(hù)提交作業(yè),可以指定每個(gè)任務(wù)需要的虛擬CPU個(gè)數(shù).
由于CPU資源的獨(dú)特性,目前這種CPU分配方式仍然是粗力度的
核心參數(shù)配置
- yarn.nodemanager.resource.cpu-vcores
該節(jié)點(diǎn)上YARN可以使用的虛擬CPU個(gè)數(shù),默認(rèn)是8,注意,目前推薦將該值設(shè)置為與物理CPU核數(shù)數(shù)目相同,如果你的節(jié)點(diǎn)CPU核數(shù)不夠8個(gè),則需要減少這個(gè)值
如果設(shè)置為-1,并且yarn.nodemanager.resource.detect-hardware-capabilities 為true時(shí)將會(huì)自動(dòng)計(jì)算操作系統(tǒng)CPU核數(shù)進(jìn)行設(shè)置 - yarn.scheduler.minimum-allocation-vcores
單個(gè)任務(wù)可申請(qǐng)的最小CPU個(gè)數(shù),默認(rèn)為1,如果一個(gè)任務(wù)申請(qǐng)的CPU個(gè)數(shù)西澳娛該數(shù),則該對(duì)應(yīng)的值修改為這個(gè)數(shù) - yarn.scheduler.maximum-allocation-vcores
單個(gè)任務(wù)可申請(qǐng)的最多虛擬CPU個(gè)數(shù),默認(rèn)為4
YARN 資源調(diào)度器
在理想情況下,應(yīng)用程序提出的請(qǐng)求將立即得到Y(jié)ARN批準(zhǔn),但是實(shí)際工作中,資源是有限的
,并且在繁忙的集群上
,應(yīng)用程序通常將需要等待其某些請(qǐng)求得到滿(mǎn)足。YARN調(diào)度程序的工作是根據(jù)一些定義的策略為應(yīng)用程序分配資源
在YARN中,負(fù)責(zé)給應(yīng)用程序分配資源的是Scheduler
,他是ResourceManager的核心組件之一,Scheduler完全專(zhuān)用于調(diào)度作業(yè),他無(wú)法跟蹤應(yīng)用程序的狀態(tài)
一般而言,調(diào)度是一個(gè)難題,并且沒(méi)有一個(gè)最佳策略,為此,YARN提供了多種調(diào)度器和可配置的策略供其選擇
調(diào)度器策略
一共有三種調(diào)度器:FIFO Scheduler(先進(jìn)先出調(diào)度器)、Capacity Scheduler(容量調(diào)度器)、Fair Scheduler(公平調(diào)度器)
Apache 版本YARN默認(rèn)使用的FIFO Scheduler,如果需要使用其他調(diào)度器,可以在yarn-site.xml中的yarn.resourcemanager.scheduler.class進(jìn)行配置
工作隊(duì)列
工作隊(duì)列Queue是從不同客戶(hù)端收到的各種任務(wù)的集合
YARN 默認(rèn)只有一個(gè)可用于提交任務(wù)的隊(duì)列,叫做default,當(dāng)然用戶(hù)也可以配置隊(duì)列形成隊(duì)列樹(shù)結(jié)構(gòu)
Scheduler的本質(zhì)就是根據(jù)何種規(guī)則策略去分配資源給隊(duì)列中的任務(wù)
隊(duì)列樹(shù)
在YARN中有層級(jí)隊(duì)列組織方法,它們構(gòu)成一個(gè)樹(shù)結(jié)構(gòu),且跟隊(duì)列叫做root。所有的應(yīng)用都運(yùn)行在葉子隊(duì)列中(即樹(shù)結(jié)構(gòu)中的非葉子節(jié)點(diǎn)只是邏輯概念,本身不能運(yùn)行應(yīng)用)。對(duì)于任何一個(gè)應(yīng)用,都可以顯式的指定它屬于的隊(duì)列,也可以不指定從而使用username或者default隊(duì)列,在YARN WebUI界面可以看到默認(rèn)的隊(duì)列組織情況
FIFO Scheduler
FIFO Scheduler時(shí)Hadoop 1.x中JobTracker原有的調(diào)度器實(shí)現(xiàn),次調(diào)度器在YARN中保留了下來(lái),是一個(gè)先進(jìn)先出
的思想,即先提交的應(yīng)用先運(yùn)行,調(diào)度工作不考慮優(yōu)先級(jí)范圍,適用于負(fù)載較低的小規(guī)模集群,當(dāng)使用大型共享集群的時(shí)候,它的效率低且會(huì)導(dǎo)致一些問(wèn)題
。
FIFO Scheduler擁有一個(gè)控制全局的隊(duì)列queue,默認(rèn)queue的名字為default,該調(diào)度器會(huì)獲取當(dāng)前集群上所有資源信息作用域這個(gè)全局的queue
優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
無(wú)需配置、先到先得,易于執(zhí)行
缺點(diǎn)
任務(wù)的優(yōu)先級(jí)不會(huì)變高,因此高優(yōu)先級(jí)的作業(yè)需要等待,不適合共享集群
配置
在Hadoop YARN中啟用FIFO調(diào)度程序,修改yarn-site.xml即可
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.sheduler.fifo.FifoScheduler</value>
</property>
Capacity Scheduler
Capacity Scheduler 容量調(diào)度時(shí)Apache Hadoop3.x 默認(rèn)調(diào)度策略
。該策略允許多個(gè)組織共享整個(gè)集群資源
,每隔組織可以獲得集群的一部分計(jì)算能力。通過(guò)為每個(gè)組織分配專(zhuān)門(mén)的隊(duì)列,然后再為每隔隊(duì)列分配一定的集群資源,這樣整個(gè)集群就可以通過(guò)設(shè)置多個(gè)隊(duì)列的方式給多個(gè)組織提供服務(wù)
Capacity 可以理解為一個(gè)個(gè)資源隊(duì)列,這個(gè)資源隊(duì)列是用戶(hù)自己去分配的,隊(duì)列內(nèi)部有可以采用垂直劃分,這樣一個(gè)組織內(nèi)部的多個(gè)成員就可以共享這個(gè)隊(duì)列資源了,在一個(gè)隊(duì)列內(nèi)部,資源的調(diào)度采用的先進(jìn)先出策略
資源隊(duì)列劃分
Capacity Scheduler調(diào)度器以隊(duì)列為單位劃分資源,通俗來(lái)說(shuō),就是一個(gè)個(gè)隊(duì)列有獨(dú)立的資源,隊(duì)列的結(jié)構(gòu)和資源是可以進(jìn)行配置的
在隊(duì)列內(nèi)部又可以繼續(xù)劃分出子隊(duì)列,子隊(duì)列在父隊(duì)列的基礎(chǔ)上再進(jìn)行資源的劃分。每個(gè)隊(duì)列里面的應(yīng)用以FIFO方式調(diào)度,每個(gè)隊(duì)列可以設(shè)定一定比例的資源最低保證和使用上限防止濫用
,當(dāng)一個(gè)隊(duì)列的資源有剩余是,可暫時(shí)將剩余資源共享給其他隊(duì)列
特性?xún)?yōu)勢(shì)
層次化的隊(duì)列設(shè)計(jì)
: 層次化的管理,可以更容易、更合理分配和限制資源的使用容量保證
:每個(gè)隊(duì)列上都可以設(shè)置一個(gè)資源的占比,保證每個(gè)隊(duì)列都不會(huì)占用整個(gè)集群的資源安全
:每隔隊(duì)列都有嚴(yán)格的訪(fǎng)問(wèn)控制,用戶(hù)只能向自己的隊(duì)列里面提交任務(wù),而不能修改或者訪(fǎng)問(wèn)其他隊(duì)列的任務(wù)彈性分配
:空閑的資源可以被分配給任何隊(duì)列,當(dāng)多個(gè)隊(duì)列出現(xiàn)爭(zhēng)用的時(shí)候,則會(huì)按照權(quán)重比例進(jìn)行平衡多租戶(hù)租用
:通過(guò)隊(duì)列的容量限制,多個(gè)用戶(hù)就可以共享一個(gè)集群,同時(shí)保證每個(gè)隊(duì)列分配到自己的容量,提高利用率操作性
:YARN支持動(dòng)態(tài)修改隊(duì)列容量、權(quán)限等分配,可以在運(yùn)行時(shí)直接修改基于用戶(hù)/組的隊(duì)列隱射
:允許用戶(hù)基于用戶(hù)或者組去映射一個(gè)作業(yè)到特定隊(duì)列
官方默認(rèn)配置
由于Hadoop默認(rèn)調(diào)度策略就是Capacity,因此官方自帶默認(rèn)配置capacity-scheduler.xml
默認(rèn)配置中顯示全局只有一個(gè)隊(duì)列default,占集群整體容量100
相關(guān)參數(shù)的配置
開(kāi)啟調(diào)度器
如果是Hadoop 3.x的話(huà)默認(rèn)就是Capacity
如果不是,那么就在yarn-site.xml中進(jìn)行開(kāi)啟
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
隊(duì)列配置
Capacity的核心就是隊(duì)列的分配和使用,修改capacity-scheduler.xml文件可以配置隊(duì)列,默認(rèn)有一個(gè)預(yù)定義的隊(duì)列root,所有的隊(duì)列都是他的子隊(duì)列。隊(duì)列的分配支持層次化配置,同級(jí)之間使用,來(lái)進(jìn)行分割
配置方法:yarn.scheduler.capacity.<queue-path>.queues
,其中<queue-path>是可選選項(xiàng),這里舉個(gè)例子
隊(duì)列屬性
隊(duì)列的資源容量占比(百分比)
系統(tǒng)繁忙時(shí),每隔隊(duì)列都應(yīng)該得到設(shè)置的量的資源,當(dāng)系統(tǒng)是空閑的時(shí)候,該隊(duì)列的資源則可以被其他隊(duì)列使用。同一層所有的隊(duì)列加起來(lái)必須時(shí)100%
隊(duì)列資源的上限
系統(tǒng)空閑時(shí),隊(duì)列可以使用其他空閑的資源,因此最多使用的資源量應(yīng)則是該參數(shù)控制。默認(rèn)是-1 表示禁用
每個(gè)資源占用最少資源
比如,設(shè)置成25%,那么如果有兩個(gè)用戶(hù)提交任務(wù),那么每個(gè)資源不超過(guò)50%,如果三個(gè)資源提交任務(wù),那么每個(gè)任務(wù)資源不超過(guò)33%默認(rèn)時(shí)100,表示不做任何限制
每個(gè)用戶(hù)最多使用的隊(duì)列資源占比
如果設(shè)置為50,那么每個(gè)用戶(hù)最多使用的資源就是50%
運(yùn)行和提交應(yīng)用限制、隊(duì)列管理等可以查看官方文檔:(
動(dòng)態(tài)修改更新配置
修改完成capacity-sheduler.xml之后,需要執(zhí)行yarn rmadmin -refreshQueues命令讓配置生效,
動(dòng)態(tài)更新生效的注意事項(xiàng):
- 隊(duì)列不能被刪除,只能是新增
- 更新隊(duì)列的配置需要是有效的值
- 同層級(jí)的隊(duì)列容量限制加起來(lái)需要等于100%
Fair Scheduler
Fair Scheduler叫做公平調(diào)度,提供了YARN應(yīng)用程序公平的共享大型集群中資源
的另一種方式,使所有應(yīng)用在平均情況下隨著時(shí)間的六十可以獲取相等的資源份額。
Fair Scheduler設(shè)計(jì)目標(biāo)是為所有的應(yīng)用分配公平的資源(對(duì)公平的定義通過(guò)參數(shù)來(lái)設(shè)置)
公平調(diào)度可以在多個(gè)隊(duì)列間工作,允許資源共享和搶占
如何理解公平共享?
有兩個(gè)用戶(hù)A和B,每個(gè)用戶(hù)都有自己的隊(duì)列,A啟動(dòng)了一個(gè)作業(yè),由于沒(méi)有B的需求,他分配了集群所有可用的資源(此時(shí)A占用100%)
然后B在A運(yùn)行的時(shí)候 啟動(dòng)了一個(gè)作業(yè),經(jīng)過(guò)一段時(shí)間,AB各自作業(yè)都使用了一半的資源(A釋放了50%,現(xiàn)在還有50%,B接受了50%,現(xiàn)在也有50%)
現(xiàn)在B用戶(hù)在其他作業(yè)運(yùn)行的時(shí)候開(kāi)始了第二個(gè)作業(yè),他將于B的另一個(gè)作業(yè)共享資源,因此B的每個(gè)作業(yè)將擁有資源的四分之一,而A繼續(xù)擁有一半的資源(A 不變?nèi)晕?0%,B1釋放25% 變?yōu)榱?5%,B2接收了25% 成為了25% ,現(xiàn)在B整體仍然為50%)
資源是在用戶(hù)之間公平的共享的
在默認(rèn)情況下,所有用戶(hù)共享一個(gè)名為default的隊(duì)列,可以在提交應(yīng)用時(shí)指定隊(duì)列,也可以通過(guò)配置根據(jù)請(qǐng)求中包含的用戶(hù)名來(lái)分配隊(duì)列,在每個(gè)隊(duì)列中
,使用調(diào)度策略在運(yùn)行的應(yīng)用程序之間共享資源,默認(rèn)設(shè)置時(shí)基于內(nèi)存的公平共享
特性?xún)?yōu)勢(shì)
分層隊(duì)列
:隊(duì)列可以按層次結(jié)構(gòu)排列以劃分資源,并可以配置權(quán)重以特定比例共享集群
基于用戶(hù)/組隊(duì)列映射
:可以根據(jù)提交任務(wù)的用戶(hù)名或者組來(lái)分配隊(duì)列。如果任務(wù)隊(duì)列制定了一個(gè)隊(duì)列,則在該隊(duì)列中提交任務(wù)
資源搶占
:根據(jù)應(yīng)用的配置,搶占和分配資源可以是友好的或者是強(qiáng)制的,默認(rèn)不啟用資源搶占
保證最小配額:可以設(shè)置隊(duì)列最小資源,允許將保證的最小配額給隊(duì)列,保證用戶(hù)可以啟動(dòng)任務(wù),當(dāng)隊(duì)列不能滿(mǎn)足最小資源時(shí),可以從其他隊(duì)列搶占,當(dāng)隊(duì)列資源使用不完時(shí),可以給其他隊(duì)列使用,這對(duì)于確保某些用戶(hù)、組或者生產(chǎn)應(yīng)用始終滿(mǎn)足資源
允許資源共享
:當(dāng)一個(gè)應(yīng)用運(yùn)行時(shí),如果其他隊(duì)列沒(méi)有任務(wù)在執(zhí)行,則可以使用其他隊(duì)列的資源,當(dāng)其他隊(duì)列有應(yīng)用需要資源時(shí)再將占用的隊(duì)列釋放出來(lái),所有的應(yīng)用都從資源隊(duì)列中分配資源
默認(rèn)不限制某個(gè)隊(duì)列和用戶(hù)可以同時(shí)運(yùn)行的應(yīng)用的數(shù)量:可以配置限制隊(duì)列和用戶(hù)并行執(zhí)行的應(yīng)用數(shù)量,限制并行執(zhí)行應(yīng)用數(shù)量不會(huì)導(dǎo)致任務(wù)提交失敗,超出的應(yīng)用會(huì)在隊(duì)列中等待
開(kāi)啟與設(shè)置
開(kāi)啟|設(shè)置 Fair Scheduler通常涉及兩個(gè)配置文件:
yarn-site.xml
Scheduler調(diào)度器級(jí)別的有關(guān)選項(xiàng),比如開(kāi)啟、指定資源配置文件路徑、搶占功能
fair-scheduler.xml
資源分配文件,用來(lái)列舉存在的queues和他們相應(yīng)的weights和capacities,allocation 文件每隔10s加載一次
,若沒(méi)有fair-scheduler.xml這個(gè)配置文件,調(diào)度器會(huì)在用戶(hù)第一個(gè)提交應(yīng)用時(shí)為其自動(dòng)創(chuàng)建一個(gè)隊(duì)列,隊(duì)列的名稱(chēng)就是用戶(hù)名
,所有的應(yīng)用都會(huì)被分配到相應(yīng)的用戶(hù)隊(duì)列中。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-447501.html
<property>
<name>yarm.resourcemanager.shceduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.schedeler.fair.allocation.file</name>
<!--如果不指定全路徑,表示在配置文件的路徑下,通常指定全路徑-->
<value>fair-scheduler.xml</value>
</property>
調(diào)度器級(jí)別配置參數(shù)(yarn-site.xml)
核心參數(shù)
#fair 資源分配文件的路徑
yarn.scheduler.fair.allocation.file
#如果未指定隊(duì)列名,一用戶(hù)名作為隊(duì)列名 實(shí)現(xiàn)了根據(jù)用戶(hù)自動(dòng)分配隊(duì)列
yarn.shceduler.fair.user-as.defalut.queue
#是否使用preemption(優(yōu)先權(quán)、搶占) 否認(rèn)false
yarn.scheduler.fair.preemption
#搶占開(kāi)始后的利用率閾值
yarn.scheduler.fair.preemption.cluster-utilization-threshold
#是否根據(jù)大小分配額分給單個(gè)應(yīng)用程序,而不是給所有應(yīng)用程序分配均等的額分,而不管大小如何
yarn.scheduler.fair.sizebasedweight
資源分配文件配置參數(shù)(fair-scheduler.xml)
分配文件必須為xml格式
主要包括隊(duì)列的層次、調(diào)度策略(整體策略和每隔隊(duì)列內(nèi)策略)、隊(duì)列設(shè)置及使用限制、搶占功能配置、最大最小資源、資源限制等文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-447501.html
到了這里,關(guān)于YARN 監(jiān)控管理以資源管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!