YARN WebUI V1服务
YARN提供了一个WebUI v1服务,该服务属于内置服务,随着RM的启动而启动,V1表示这是第一代版本的WebUI服务,用户可以通过浏览器登陆界面,来监控集群、队列、应用程序、服务、节点信息,还可以查看集群详细配置的信息,检查各种应用程序和服务的日志
首页
浏览器输入http://RM_HOST:8088 访问YARN WebUI服务,浏览器打开后以列表的形式展示处于各种状态的各种应用程序,入MapReduce应用程序、Spark应用程序、Flink应用等。
JobHistoryServer服务
在默认情况下,YARN RM重启之后,已完成的作业和正在执行的作业信息都会丢失,针对正在执行的作业恢复,可以设置RM重启机制回复,如果没有开启则全部丢失。JobHistoryServer(JHS)属于YARN的一项系统服务,进存储与已经完成的MapReduce应用程序的作业历史信息,并不会存储其他类型(如spark、flink等)应用程序的作业历史信息,当启用JHS服务时,建议开启日志聚合红能,利于统一管理和分析日志,否则每隔Container的运行日志是存储在NodeManager节点本地,查看日志时需要访问各个NodeManager节点
配置
Step1 :mapred-site.xml 添加JHS配置
<!--jobhistory 服务配置,注意19888是web ui访问端口-->
<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 添加日志聚合配置
<!--开启yarn日志聚合功能,手机每个容器的日志 集中存储在同一个地方-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--设置日志保留时间: 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进行同步
scp yarn-site.xml mapred-site.xml hadoop133:$PWD
scp yarn-site.xml mapred-site.xml hadoop134:$PWD
启动Hadoop集群、手动启动JHS服务
# 启动hadoop
start-all.sh
# 启动JHS服务
mapred -- daemon start historyserver
我们通过JPS来进行查看
启动成功
我们前往相关页面(在配置文件中有设置的信息,我设置的hadoop132-father:19888,在使用的时候根据自己在step1 的设置进行相关的操作)
在这里可以直接进行查看相关信息,在这里我们可以直接看到启动了多少个Map、多少个Reduce,以及运行的结果:多少个运行成功,多少个运行失败。
同时也可以看到在哪台机器上运行的,点击一下可以查看更加详细的信息:比如说最后一次心跳是什么时候
TimelineServer服务
由于JobHistoryServer进队MapReduce应用程序提供历史信息支持,其他应用程序的历史信息需要分别提供单独的HistoryServer才能查询和检索,例如Spark的Application需要通过Spark自己提供的HistoryServer来解决应用历史信息,为了解决这个问题YARN新增了Timeline Server组件,以通用的方式存储和检索应用程序当前和历史信息
,在中文语境下,将Timeline Server称之为时间轴服务
作用
- 存储应用程序的特定信息
手机和检索指定应用程序或者框架的某些信息,例如Hadoop的MR框架会产生像Map Task数量、Reduce Task数量 Counter等信息,应用开发人员可以通过TimelineClient,在Application Master或者Container中将特定的程序发送给Timeline服务器,同时Timeline 提供RESTAPI ,用以查询Timeline中存储的信息,并可以通过应用程序或者框架的特定UOI进行展示 - 保存已经完成应用程序的常规信息
在之前此功能只能通过JobHistoryServer 实现,并且仅支持MR Job,随着Timeline服务出现,JobHistoryServerv的功能看成了Timeline的一部分
YARN操作维护命令
USER用户命令
application
使用方法
yarn application [options]
可以直接使用 --help选项查看帮助文档
常用选项
# 查看所有的application 仅显示状态为SUBMITTED ACCEPTED RUNNING 应用
yarn application -list
# 查看状态为ALL的application 列表
yarn application -list -appStates ALL
# 杀死某个Application
yarn application -kill Application-ID
#查看某个Application的统计报告
yarn application -status Application-Id
# 查看类型为MAPREDUCE 的Application列表
yarn application -list -appTypes MAPREDUCE
# 移动一个Application 到default队列中
yarn application -movetoqueue Application-ID -toqueue default
#移动一个Application 到优先队列中
yarn application -updatePriority 优先级 -appId Application-ID
jar
这个方法经常使用,我们通常运行jar 包都是通过这条命令运行的
yarn jar xxx.jar [mainClass] args
通常在${HADOOP_HOME}$/share/hadoop/mapreduce
下官方放置了一些可供测试的jar包
applicationattempt
使用方法
yarn applicationattempt [options]
applicationattempt可以理解为一个app应用内部的一次尝试执行过程,
相关操作
#标记某一次applicationattempt 失败
yarn applicationattempt -fail Appattempt-ID
# 查看某个应用所有的attempt
yarn applicationattempt -list Application-ID
# 查看具体某一个applicationattempt 的报告
yarn applicationattempt -status Appattempt-ID
container
使用方式
yarn container [options]
可以根据attemptID操作作业的Container相关信息
常用操作
# 列出指定attemptID所有的container信息
#attemptID可以从RM web UI或者时间轴服务[Timeline Server]上获取
yarn container -list Application_Attempt-ID
# 打印容器的状态
yarn container -status Container-ID
logs
使用方法
#日志相关操作命令
yarn logs -applicationId ApplicationID [options]
常用命令
#查看应用程序所有的logs 此操作需要慎重 显示内容比较多
yarn logs -applicationId ApplicationID
# 置顶显示内容大小
yarn logs -applicationId ApplicationID -size size
# 查看应用程序某个container运行所在的节点的log
yarn logs -applicationId ApplicationID -containerId containerId
queue
使用方式
# 队列相关的操作命令
yarn queue [options]
常用命令
#查看某个queue 的状态,
yarn queue -status queue-name
node
使用方法
# 集群节点操作命令
yarn node [options]
常用的相关操作
#查看yarn所有从节点
yarn node -list -all
# 查看所有 正在运行的节点
yarn node -list -states RUNNING
# 查看yarn所有节点的详细
yarn node -list showDetails
#查看yarn某个节点的报告
yarn node -status 节点
version
查看版本号
yarn version
Admin 管理命令
resourcemanager | nodemanager
使用方法
# 针对RM的操作命令
yarn resourcemanager [optinons]
常用操作
# 启动某个节点的resourcemanager
yan resourcemanager
# 启动某个节点的nodemanager
yarn nodemanager
#格式化resourcemanager的RMStateStore
yarn resourcemanager -format-state-stroe
# 删除RMStateStore的Application
yarn resoucemanager -remove-application-from-state-stroe ApplicationID
proxyserver
使用方式
#启动某个节点的proxyserver,使用代理的原因是为了减少通过YARN进行基于Web的攻击的可能性
yarn proxyserver
YARN Proxy Server 服务需要提前配置
<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的日志级别
yarn daemonlog -getlevel hadoop132-father:8088 0rg.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApplmpl
rmadmin
使用方式
# 这个命令比较重要 使用的也比较多
yarn rmadmin [options]
常用命令
# 重新加载mapred-queues 配置文件
yarn rmadmin -refreshQueues
#刷新ResouceManager的主机信息
yarn rmadmin -refreshNodes
# 在Resourcemanager上刷新NodeManager的资源
yarn readmin -refreshNodesResources
# 刷新超级用户代理组映射
yarn readmin -refreshSuperUserGroupsConfiguration
# 刷新ACL以管理ResourceManager
yarn readmin -refreshAdminAcls
#获取Resourcemanager服务的Active/standby状态
yarn rmadmin -getAllServiceState
# ResourceManager服务执行健康检查,如果检查失败RMAdmin工具将使用非零退出码退出
yarn rmadmin -checkHealth rm1
rarn rmadmin -checkHealth rm2
timelineserver
使用方式
# 启动时间轴服务 通常使用第二条进行启动
yarn timelineserver
yarn-daemon.sh start timelineserver
时间轴服务Web UI 端口 8188
scmadmin
使用方法
# scmadmin 是ShareCacheManager (共享缓存管理)的管理客户端
yarn scmadmin
常用命令
# 执行清理任务
yarn scmadmin -runCleanerTask
#先启动SCM服务
yarn-daemon.sh start sharecachemanager
YARN 资源管理与隔离
在YARN中资源管理由ResourceManager和NodeManager共同完成,其中ResouceManager中的调度器负责资源的分配,而NodeManager负责资源的供给与隔离。
资源调度分配:ResourceManager将某个NodeManager上资源分配给任务
资源隔离:NodeManager按照需求为任务提供相应的资源,甚至保证这些资源具有独占性,为任务运行提供基础的保证
Hadoop YARN同时支持内存和CPU两种资源的调度
,内存资源的多多少少会决定任务的生死,如果内存不够,任务可能会运行失败,相比之下CPU资源则不同,他只会决定任务运行的快慢,不会对生死产生影响
Memory内存资源
YARN允许用户配置每个节点上课用的物理内存资源;这里是“可用的”,因为一个节点上的内存会被若干个服务共享,比如说一部分分给YARN,一部分分给HDFS,一部分分给HBase,YARN配置的只是自己可以使用的
配置核心参数
- yarn.nodemanager.resource.memory-mb
该节点上YARN可以使用的物理内存总量,默认为8192MB
如果设置为-1,并且yarn.nodemanager.resource。detect-hardware-capabilities 为true时将会自动计算操作系统内存进行设置 - yarn.nodemanager.vmem-pmem-ratio
任务每使用1MB物理内存,最多可以使用虚拟内存量,默认为2.1 - yarn.nodemanager.peme-check-enabled
是否启动一个线程检查每个任务正在使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认为true - yarn nodemanager.veme-check-enable
是否启动一个线程检查每个任务正在使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认为true - yarn.scheduler.minimum-allocation-mb
单个任务可以申请的最少物理内存量,默认为1024MB,如果一个任务申请的物理内存量少于该值,则该对应的值改为这个数 - yarn.scheduler.maximum-allocation-mb
单个任务可以申请的最多物理内存量 最多为8192MB
在默认情况下,YARN采用了线程监控
的方法判断任务是否超量使用内存,一旦发现超量,则直接将其杀死,对于Cgroups对内存的控制缺乏灵活性(即任务任何时刻不能超出内存上线,如果超过,则直接将其杀死或者报OOM),而Java进程在创建瞬间内存将翻倍,之后骤降到正常值,采用线程监控的方式更加灵活(当发现内存树内存瞬间翻倍超过设定值时,可认为是正常现象,不会将任务杀死),因此YARN未提供Cgroups内存隔离机制
CPU资源
在YARN中CPU资源的组织方式人在探索中,之前只是非常粗粒度的实现方式。
CPU被划分为虚拟CPU,此处的虚拟CPU时YARN自己引入的概念,初衷是考虑到不同节点的CPU性能可能不同,每个CPU具有的计算能力也是不一样的,比如说某个物理CPU的计算能力可能是另一个的2倍,此时可以通过为第一个物理CPU多配置几个虚拟CPU来弥补这个差异。
用户提交作业,可以指定每个任务需要的虚拟CPU个数.
由于CPU资源的独特性,目前这种CPU分配方式仍然是粗力度的
核心参数配置
- yarn.nodemanager.resource.cpu-vcores
该节点上YARN可以使用的虚拟CPU个数,默认是8,注意,目前推荐将该值设置为与物理CPU核数数目相同,如果你的节点CPU核数不够8个,则需要减少这个值
如果设置为-1,并且yarn.nodemanager.resource.detect-hardware-capabilities 为true时将会自动计算操作系统CPU核数进行设置 - yarn.scheduler.minimum-allocation-vcores
单个任务可申请的最小CPU个数,默认为1,如果一个任务申请的CPU个数西澳娱该数,则该对应的值修改为这个数 - yarn.scheduler.maximum-allocation-vcores
单个任务可申请的最多虚拟CPU个数,默认为4
YARN 资源调度器
在理想情况下,应用程序提出的请求将立即得到YARN批准,但是实际工作中,资源是有限的
,并且在繁忙的集群上
,应用程序通常将需要等待其某些请求得到满足。YARN调度程序的工作是根据一些定义的策略为应用程序分配资源
在YARN中,负责给应用程序分配资源的是Scheduler
,他是ResourceManager的核心组件之一,Scheduler完全专用于调度作业,他无法跟踪应用程序的状态
一般而言,调度是一个难题,并且没有一个最佳策略,为此,YARN提供了多种调度器和可配置的策略供其选择
调度器策略
一共有三种调度器:FIFO Scheduler(先进先出调度器)、Capacity Scheduler(容量调度器)、Fair Scheduler(公平调度器)
Apache 版本YARN默认使用的FIFO Scheduler,如果需要使用其他调度器,可以在yarn-site.xml中的yarn.resourcemanager.scheduler.class进行配置
工作队列
工作队列Queue是从不同客户端收到的各种任务的集合
YARN 默认只有一个可用于提交任务的队列,叫做default,当然用户也可以配置队列形成队列树结构
Scheduler的本质就是根据何种规则策略去分配资源给队列中的任务
队列树
在YARN中有层级队列组织方法,它们构成一个树结构,且跟队列叫做root。所有的应用都运行在叶子队列中(即树结构中的非叶子节点只是逻辑概念,本身不能运行应用)。对于任何一个应用,都可以显式的指定它属于的队列,也可以不指定从而使用username或者default队列,在YARN WebUI界面可以看到默认的队列组织情况
FIFO Scheduler
FIFO Scheduler时Hadoop 1.x中JobTracker原有的调度器实现,次调度器在YARN中保留了下来,是一个先进先出
的思想,即先提交的应用先运行,调度工作不考虑优先级范围,适用于负载较低的小规模集群,当使用大型共享集群的时候,它的效率低且会导致一些问题
。
FIFO Scheduler拥有一个控制全局的队列queue,默认queue的名字为default,该调度器会获取当前集群上所有资源信息作用域这个全局的queue
优缺点
优点
无需配置、先到先得,易于执行
缺点
任务的优先级不会变高,因此高优先级的作业需要等待,不适合共享集群
配置
在Hadoop YARN中启用FIFO调度程序,修改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 容量调度时Apache Hadoop3.x 默认调度策略
。该策略允许多个组织共享整个集群资源
,每隔组织可以获得集群的一部分计算能力。通过为每个组织分配专门的队列,然后再为每隔队列分配一定的集群资源,这样整个集群就可以通过设置多个队列的方式给多个组织提供服务
Capacity 可以理解为一个个资源队列,这个资源队列是用户自己去分配的,队列内部有可以采用垂直划分,这样一个组织内部的多个成员就可以共享这个队列资源了,在一个队列内部,资源的调度采用的先进先出策略
资源队列划分
Capacity Scheduler调度器以队列为单位划分资源,通俗来说,就是一个个队列有独立的资源,队列的结构和资源是可以进行配置的
在队列内部又可以继续划分出子队列,子队列在父队列的基础上再进行资源的划分。每个队列里面的应用以FIFO方式调度,每个队列可以设定一定比例的资源最低保证和使用上限防止滥用
,当一个队列的资源有剩余是,可暂时将剩余资源共享给其他队列
特性优势
层次化的队列设计
: 层次化的管理,可以更容易、更合理分配和限制资源的使用容量保证
:每个队列上都可以设置一个资源的占比,保证每个队列都不会占用整个集群的资源安全
:每隔队列都有严格的访问控制,用户只能向自己的队列里面提交任务,而不能修改或者访问其他队列的任务弹性分配
:空闲的资源可以被分配给任何队列,当多个队列出现争用的时候,则会按照权重比例进行平衡多租户租用
:通过队列的容量限制,多个用户就可以共享一个集群,同时保证每个队列分配到自己的容量,提高利用率操作性
:YARN支持动态修改队列容量、权限等分配,可以在运行时直接修改基于用户/组的队列隐射
:允许用户基于用户或者组去映射一个作业到特定队列
官方默认配置
由于Hadoop默认调度策略就是Capacity,因此官方自带默认配置capacity-scheduler.xml
默认配置中显示全局只有一个队列default,占集群整体容量100
相关参数的配置
开启调度器
如果是Hadoop 3.x的话默认就是Capacity
如果不是,那么就在yarn-site.xml中进行开启
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
队列配置
Capacity的核心就是队列的分配和使用,修改capacity-scheduler.xml文件可以配置队列,默认有一个预定义的队列root,所有的队列都是他的子队列。队列的分配支持层次化配置,同级之间使用,来进行分割
配置方法:yarn.scheduler.capacity.<queue-path>.queues
,其中<queue-path>是可选选项,这里举个例子
队列属性
队列的资源容量占比(百分比)
系统繁忙时,每隔队列都应该得到设置的量的资源,当系统是空闲的时候,该队列的资源则可以被其他队列使用。同一层所有的队列加起来必须时100%
队列资源的上限
系统空闲时,队列可以使用其他空闲的资源,因此最多使用的资源量应则是该参数控制。默认是-1 表示禁用
每个资源占用最少资源
比如,设置成25%,那么如果有两个用户提交任务,那么每个资源不超过50%,如果三个资源提交任务,那么每个任务资源不超过33%默认时100,表示不做任何限制
每个用户最多使用的队列资源占比
如果设置为50,那么每个用户最多使用的资源就是50%
运行和提交应用限制、队列管理等可以查看官方文档:(
动态修改更新配置
修改完成capacity-sheduler.xml之后,需要执行yarn rmadmin -refreshQueues命令让配置生效,
动态更新生效的注意事项:
- 队列不能被删除,只能是新增
- 更新队列的配置需要是有效的值
- 同层级的队列容量限制加起来需要等于100%
Fair Scheduler
Fair Scheduler叫做公平调度,提供了YARN应用程序公平的共享大型集群中资源
的另一种方式,使所有应用在平均情况下随着时间的六十可以获取相等的资源份额。
Fair Scheduler设计目标是为所有的应用分配公平的资源(对公平的定义通过参数来设置)
公平调度可以在多个队列间工作,允许资源共享和抢占
如何理解公平共享?
有两个用户A和B,每个用户都有自己的队列,A启动了一个作业,由于没有B的需求,他分配了集群所有可用的资源(此时A占用100%)
然后B在A运行的时候 启动了一个作业,经过一段时间,AB各自作业都使用了一半的资源(A释放了50%,现在还有50%,B接受了50%,现在也有50%)
现在B用户在其他作业运行的时候开始了第二个作业,他将于B的另一个作业共享资源,因此B的每个作业将拥有资源的四分之一,而A继续拥有一半的资源(A 不变仍未50%,B1释放25% 变为了25%,B2接收了25% 成为了25% ,现在B整体仍然为50%)
资源是在用户之间公平的共享的
在默认情况下,所有用户共享一个名为default的队列,可以在提交应用时指定队列,也可以通过配置根据请求中包含的用户名来分配队列,在每个队列中
,使用调度策略在运行的应用程序之间共享资源,默认设置时基于内存的公平共享
特性优势
分层队列
:队列可以按层次结构排列以划分资源,并可以配置权重以特定比例共享集群
基于用户/组队列映射
:可以根据提交任务的用户名或者组来分配队列。如果任务队列制定了一个队列,则在该队列中提交任务
资源抢占
:根据应用的配置,抢占和分配资源可以是友好的或者是强制的,默认不启用资源抢占
保证最小配额:可以设置队列最小资源,允许将保证的最小配额给队列,保证用户可以启动任务,当队列不能满足最小资源时,可以从其他队列抢占,当队列资源使用不完时,可以给其他队列使用,这对于确保某些用户、组或者生产应用始终满足资源
允许资源共享
:当一个应用运行时,如果其他队列没有任务在执行,则可以使用其他队列的资源,当其他队列有应用需要资源时再将占用的队列释放出来,所有的应用都从资源队列中分配资源
默认不限制某个队列和用户可以同时运行的应用的数量:可以配置限制队列和用户并行执行的应用数量,限制并行执行应用数量不会导致任务提交失败,超出的应用会在队列中等待
开启与设置
开启|设置 Fair Scheduler通常涉及两个配置文件:
yarn-site.xml
Scheduler调度器级别的有关选项,比如开启、指定资源配置文件路径、抢占功能
fair-scheduler.xml
资源分配文件,用来列举存在的queues和他们相应的weights和capacities,allocation 文件每隔10s加载一次
,若没有fair-scheduler.xml这个配置文件,调度器会在用户第一个提交应用时为其自动创建一个队列,队列的名称就是用户名
,所有的应用都会被分配到相应的用户队列中。文章来源:https://www.toymoban.com/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>
调度器级别配置参数(yarn-site.xml)
核心参数
#fair 资源分配文件的路径
yarn.scheduler.fair.allocation.file
#如果未指定队列名,一用户名作为队列名 实现了根据用户自动分配队列
yarn.shceduler.fair.user-as.defalut.queue
#是否使用preemption(优先权、抢占) 否认false
yarn.scheduler.fair.preemption
#抢占开始后的利用率阈值
yarn.scheduler.fair.preemption.cluster-utilization-threshold
#是否根据大小分配额分给单个应用程序,而不是给所有应用程序分配均等的额分,而不管大小如何
yarn.scheduler.fair.sizebasedweight
资源分配文件配置参数(fair-scheduler.xml)
分配文件必须为xml格式
主要包括队列的层次、调度策略(整体策略和每隔队列内策略)、队列设置及使用限制、抢占功能配置、最大最小资源、资源限制等文章来源地址https://www.toymoban.com/news/detail-447501.html
到了这里,关于YARN 监控管理以资源管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!